{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np # 导入NumPy数学工具箱\nimport pandas as pd # 导入Pandas数据处理工具箱\ndf_heart = pd.read_csv(\"../input/heart-dataset/heart.csv\")  # 读取文件\ndf_heart.head() # 显示前5行数据","execution_count":35,"outputs":[{"output_type":"execute_result","execution_count":35,"data":{"text/plain":"   age  sex  cp  trestbps  chol  fbs  restecg  thalach  exang  oldpeak  slope  \\\n0   63    1   3       145   233    1        0      150      0      2.3      0   \n1   37    1   2       130   250    0        1      187      0      3.5      0   \n2   41    0   1       130   204    0        0      172      0      1.4      2   \n3   56    1   1       120   236    0        1      178      0      0.8      2   \n4   57    0   0       120   354    0        1      163      1      0.6      2   \n\n   ca  thal  target  \n0   0     1       1  \n1   0     2       1  \n2   0     2       1  \n3   0     2       1  \n4   0     2       1  ","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>age</th>\n      <th>sex</th>\n      <th>cp</th>\n      <th>trestbps</th>\n      <th>chol</th>\n      <th>fbs</th>\n      <th>restecg</th>\n      <th>thalach</th>\n      <th>exang</th>\n      <th>oldpeak</th>\n      <th>slope</th>\n      <th>ca</th>\n      <th>thal</th>\n      <th>target</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>63</td>\n      <td>1</td>\n      <td>3</td>\n      <td>145</td>\n      <td>233</td>\n      <td>1</td>\n      <td>0</td>\n      <td>150</td>\n      <td>0</td>\n      <td>2.3</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>37</td>\n      <td>1</td>\n      <td>2</td>\n      <td>130</td>\n      <td>250</td>\n      <td>0</td>\n      <td>1</td>\n      <td>187</td>\n      <td>0</td>\n      <td>3.5</td>\n      <td>0</td>\n      <td>0</td>\n      <td>2</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>41</td>\n      <td>0</td>\n      <td>1</td>\n      <td>130</td>\n      <td>204</td>\n      <td>0</td>\n      <td>0</td>\n      <td>172</td>\n      <td>0</td>\n      <td>1.4</td>\n      <td>2</td>\n      <td>0</td>\n      <td>2</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>56</td>\n      <td>1</td>\n      <td>1</td>\n      <td>120</td>\n      <td>236</td>\n      <td>0</td>\n      <td>1</td>\n      <td>178</td>\n      <td>0</td>\n      <td>0.8</td>\n      <td>2</td>\n      <td>0</td>\n      <td>2</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>57</td>\n      <td>0</td>\n      <td>0</td>\n      <td>120</td>\n      <td>354</td>\n      <td>0</td>\n      <td>1</td>\n      <td>163</td>\n      <td>1</td>\n      <td>0.6</td>\n      <td>2</td>\n      <td>0</td>\n      <td>2</td>\n      <td>1</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport seaborn as sns #导入seaborn画图工具箱\nsns.countplot(x=\"target\", data=df_heart, palette=\"bwr\")\nplt.show()","execution_count":36,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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97+vf//735KkTZs2KS0tTffee6+mTJmilJQUbdmyRXfeeafN/3IkLAvAiNrb263S0lLLsizr0qVL1ttvv21ZlmV1dXVZK1assIaHh6329nZrwYIF1qlTpyzLsqyOjg5r2bJlVk9PjzUwMGB9+ctftrZu3WpZlmVVV1dbJ06csCzLss6dO2etXLnSsizL+vnPf27V1dXF+p8HXGGq3VECrheWZenRRx/ViRMnNGXKFIVCIf33v/+VJM2dO1eLFi2SJL3++uvKy8vTrFmzJEkrV65UW1ubJOno0aOXXcTowoULunDhQmz/IcAoiAIwRvv371d3d7f27t2radOmKT8/X+FwWJL0kY98xNzPGuWM7PDwsJ599lndcMMNUZ8XGA9eaAZGMWPGDPX390uS3n77baWmpmratGk6fvy4zp07d9XfycnJ0YkTJ9Tb26vBwUE1Njaa25YsWaLf/va35udgMHjFcQA7EQVgFLNnz9anPvUplZWV6c0339Tp06dVUVGh/fv3a968eVf9nbS0NN1///364he/KK/Xq/nz5+vGG2+UJG3evFmnT5/WqlWrVFJSYt7ZtGzZMv3lL3/R6tWr9eqrr8bs3wd8EO8+AqKgv79fM2bM0ODgoL71rW9pzZo1KigosHss4Jp4TQGIgscee0xHjx5VOBzWkiVLtGLFCrtHAsaEZwoAAIPXFAAABlEAABhEAQBgEAUAgEEUAADG/wCIR38xFmq4XQAAAABJRU5ErkJggg==\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 将某些特征转换为数值类型的哑变量\na = pd.get_dummies(df_heart['cp'], prefix = \"cp\")\nb = pd.get_dummies(df_heart['thal'], prefix = \"thal\")\nc = pd.get_dummies(df_heart['slope'], prefix = \"slope\")\nframes = [df_heart, a, b, c]\ndf_heart = pd.concat(frames, axis = 1)\ndf_heart.head()\ndf_heart = df_heart.drop(columns = ['cp', 'thal', 'slope'])\ndf_heart.head()","execution_count":37,"outputs":[{"output_type":"execute_result","execution_count":37,"data":{"text/plain":"   age  sex  trestbps  chol  fbs  restecg  thalach  exang  oldpeak  ca  ...  \\\n0   63    1       145   233    1        0      150      0      2.3   0  ...   \n1   37    1       130   250    0        1      187      0      3.5   0  ...   \n2   41    0       130   204    0        0      172      0      1.4   0  ...   \n3   56    1       120   236    0        1      178      0      0.8   0  ...   \n4   57    0       120   354    0        1      163      1      0.6   0  ...   \n\n   cp_1  cp_2  cp_3  thal_0  thal_1  thal_2  thal_3  slope_0  slope_1  slope_2  \n0     0     0     1       0       1       0       0        1        0        0  \n1     0     1     0       0       0       1       0        1        0        0  \n2     1     0     0       0       0       1       0        0        0        1  \n3     1     0     0       0       0       1       0        0        0        1  \n4     0     0     0       0       0       1       0        0        0        1  \n\n[5 rows x 22 columns]","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>age</th>\n      <th>sex</th>\n      <th>trestbps</th>\n      <th>chol</th>\n      <th>fbs</th>\n      <th>restecg</th>\n      <th>thalach</th>\n      <th>exang</th>\n      <th>oldpeak</th>\n      <th>ca</th>\n      <th>...</th>\n      <th>cp_1</th>\n      <th>cp_2</th>\n      <th>cp_3</th>\n      <th>thal_0</th>\n      <th>thal_1</th>\n      <th>thal_2</th>\n      <th>thal_3</th>\n      <th>slope_0</th>\n      <th>slope_1</th>\n      <th>slope_2</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>63</td>\n      <td>1</td>\n      <td>145</td>\n      <td>233</td>\n      <td>1</td>\n      <td>0</td>\n      <td>150</td>\n      <td>0</td>\n      <td>2.3</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>37</td>\n      <td>1</td>\n      <td>130</td>\n      <td>250</td>\n      <td>0</td>\n      <td>1</td>\n      <td>187</td>\n      <td>0</td>\n      <td>3.5</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>41</td>\n      <td>0</td>\n      <td>130</td>\n      <td>204</td>\n      <td>0</td>\n      <td>0</td>\n      <td>172</td>\n      <td>0</td>\n      <td>1.4</td>\n      <td>0</td>\n      <td>...</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>56</td>\n      <td>1</td>\n      <td>120</td>\n      <td>236</td>\n      <td>0</td>\n      <td>1</td>\n      <td>178</td>\n      <td>0</td>\n      <td>0.8</td>\n      <td>0</td>\n      <td>...</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>57</td>\n      <td>0</td>\n      <td>120</td>\n      <td>354</td>\n      <td>0</td>\n      <td>1</td>\n      <td>163</td>\n      <td>1</td>\n      <td>0.6</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>1</td>\n    </tr>\n  </tbody>\n</table>\n<p>5 rows × 22 columns</p>\n</div>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 构建特征和标签集\ny = df_heart.target.values\nX = df_heart.drop(['target'], axis = 1)","execution_count":38,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split # 拆分训练集和测试集\nX_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2,random_state=0)","execution_count":39,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 进行特征缩放\nfrom sklearn import preprocessing\nscaler = preprocessing.MinMaxScaler()\nX_train = scaler.fit_transform(X_train)\nX_test = scaler.transform(X_test)","execution_count":40,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.neighbors import KNeighborsClassifier # 导入kNN算法\nk = 5 # 设定初始K值为5\nkNN = KNeighborsClassifier(n_neighbors = k)  # kNN模型\nkNN.fit(X_train, y_train) # 拟合kNN模型\ny_pred = kNN.predict(X_test) # 预测心脏病结果\nfrom sklearn.metrics import (accuracy_score, f1_score, average_precision_score, confusion_matrix) # 导入评估标准\nprint(\"{}NN 预测准确率: {:.2f}%\".format(k, kNN.score(X_test, y_test)*100))\nprint(\"{}NN 预测F1分数: {:.2f}%\".format(k, f1_score(y_test, y_pred)*100))\nprint('kNN 混淆矩阵:\\n', confusion_matrix(y_pred, y_test))","execution_count":41,"outputs":[{"output_type":"stream","text":"5NN 预测准确率: 85.25%\n5NN 预测F1分数: 86.15%\nkNN 混淆矩阵:\n [[24  6]\n [ 3 28]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 寻找最佳K值\nf1_score_list = []\nacc_score_list = []\nfor i in range(1,15):\n    kNN = KNeighborsClassifier(n_neighbors = i)  # n_neighbors means k\n    kNN.fit(X_train, y_train)\n    acc_score_list.append(kNN.score(X_test, y_test))\n    y_pred = kNN.predict(X_test) # 预测心脏病结果\n    f1_score_list.append(f1_score(y_test, y_pred))\nindex = np.arange(1,15,1)\nplt.plot(index,acc_score_list,c='blue',linestyle='solid')\nplt.plot(index,f1_score_list,c='red',linestyle='dashed')\nplt.legend([\"Accuracy\", \"F1 Score\"])\nplt.xlabel(\"K value\")\nplt.ylabel(\"Score\")\nplt.grid('false')\nplt.show()\nkNN_acc = max(f1_score_list)*100\nprint(\"Maximum kNN Score is {:.2f}%\".format(kNN_acc))","execution_count":42,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"iVBORw0KGgoAAAANSUhEUgAAAYgAAAEGCAYAAAB/+QKOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deViU5frA8e+wuyPKoqKY5kJpZmllaiomooj7kq1qammlZlouqR1PZnoqj2VpHtOO/cxTqWlJWi4ZmViWC6VILiBYQuKKwz68vz8eIZABB5h3Frg/18Ul8673jMPc8z7v89yPQdM0DSGEEOIGLvYOQAghhGOSBCGEEMIsSRBCCCHMkgQhhBDCLEkQQgghzHKzdwDWdPjwYTw9Pe0dRjFZWVkOGZclJHb7kNhtz1njhorFnpWVxZ133ml2XaVKEJ6engQHB9s7jGJiY2MdMi5LSOz2IbHbnrPGDRWLPTY2tsR10sQkhBDCLEkQQgghzJIEIYQQwixdE0RUVBS9e/emV69erFy5stj6K1eu8MwzzxAREcHQoUP5/fffLd5XCCGEvnRLECaTifnz57Nq1SoiIyPZunUrJ0+eLLLNihUrCA4O5ssvv2TRokUsWLDA4n2FEELoS7cEERMTQ1BQEI0bN8bDw4Pw8HB27dpVZJtTp05x3333AdC8eXP++OMPUlNTLdpXCCGEvnTr5pqSkkJAQEDBY39/f2JiYops07p1a3bs2EGHDh2IiYnhzz//JDk52aJ9zcnKyiq1y5a9ZGZmOmRclpDY7UNitz1njRv0i123BGGuirjBYCjyePz48SxYsIABAwbQsmVLgoODcXNzs2hfc2QchPVJ7PYhsdues8YN+o2D0C1BBAQEkJycXPA4JSUFPz+/ItvUrFmThQsXAiqh9OzZk8DAQDIyMm66r7guNxeOH4c2bewdiRCiktHtHkTbtm1JSEggKSmJ7OxsIiMjCQkJKbLN1atXyc7OBuCzzz6jQ4cO1KxZ06J9BXD5MgwYAF26QHq6vaMRQlQyul1BuLm5MXfuXMaOHYvJZGLIkCG0aNGC9evXAzBy5EhOnTrFSy+9hIuLC7feemtBL6aS9hU3+N//4Kuv1O8ffwxjx9o3HiFEpaJrLaZu3brRrVu3IstGjhxZ8Hv79u355ptvLN5X3CAxEdzcoHVreOcdePJJsOBejaigzEzw8lK/Hz78d5IubNw48PWFn36CnTuLr3/2WahdG/buhaioouvc3HDr2BGctD1cVB6VqlhflXPmDDRuDJMnqw+kvXuha1d7R1W5XbwInTurD/hnnoFffoHZs4tvN3CgShD79plf/9hjKkHs2QNz5hRd5+uLtnGjLuELURZSasOZJSZCkybw8MNQty58+qm9I6rcsrJg0CA4fRratVPLRo1Sy2/8yf/2/9xz5tcHBqr1M2cWX5eUhKl+fdUBYdkyuH6fTghbkysIZ5aYCN27Q/XqsH8/3HqrvSOqvDRNXaVFRcG6dapjAICrq/opSUXWf/21SjAffQSffAJNm5Y7fCHKQ64gnNnChTB6tPq9ZUtwcVEfZML6Xn1VfVDPn6+u2GwhPBw2bFDdmNu3h82bbXNeIa6TBOHMHn5YXUHk++gjuO02dRNVWJe3t0rGL79s2/MOGQKHDqmrw0GD4PXXbXt+UaVJgnBWf/0F0dGQkfH3sgYN1LdNuRdhPTk56t/nnoMPPrBPL7FmzVQHhClT4MEHbX9+UWVJgnBWO3bA/fdDQsLfy3r2VF1ely2zW1iVysmTqukuv1CkPbsQe3rCkiXQoYN6PGsWfP65/eIRVYIkCGeVmKj+bdLk72UGg+p+eeAA/PijfeKqLC5cgL59IS0NgoLsHU1RGRlqbMXgwaqLc1aWvSMSlZQkCGd15gzUqwc1ahRd/vjjUKuWGjgnyicrS334njmjbgw7Wu+watX+bnJ6+201LuP0aXtHJSohSRDOKn8MxI1q1YJ331VXEqLsNE2VLImKgg8//Ls7q6Px8FBNTp9/DqdOqQGS0jlBWJmMg3BWiYlQUn2qxx6zbSyVicmk2vvnz4dCZWEc1sCBcOedcPSoKv+haWqAnbu7vSMTlYAkCGe1YoX6FlmS33+H999X3SLlw8IyJpOqbfWf/9g7krJp2vTvQXQffKDeG598As2b2zMqUQlIE5Oz6tIF7rmn5PUnTsBbb8GmTbaLyZnt3Qtt26qeSwaD8xY99PNTTU533aUG2QlRAXIF4YxSUuC778i4vycPP1ePefNUK0MRffqob5DvvAMjRtglTKdx8qRqqqlXD3x8brr5unWwdKm64NCDmxs88kit8hVz7d9fDax76CEYNkwVFHzjjb+rzwpRBpIgnNFPP8GIEZxY9RObN9cjNVXdUy3ypdfFRX04TJ2qPjDat7dbuA4tvzsrqLLdN0kQS5eqzkNt2+rX+/XUKXj++UbUqKEquJdZ06bqDTFrFrz5pkp+MsBOlIMkCGd05gwAR9NUL6a9e2HrVoiIuGG7/NIQy5aptmlRVOHurLt3l9pmr2nwyivq3vXgwWp+Jk9PfcIyGiEszMjYsTW5dAmmTSvHQTw81JXDmDGq/AqoKyVH67IrHJrcg3BGiYng6UnMOV88PFRnppkzzTR5eHvDxInqX1Fcejrk5anurJ07l7hZXp4ajzZ/vsq5n3yiX3IANbRl2bIkhg+H6dPVdBLlrsGYnxwOHVIlyCdOlO6wwmKSIJxRYiI0bkxsnAu33gqvvaZ6Of7f/5nZ9l//Us0Moqi8PDWHxnffldqdNSdHTfnwzjuqte6DD9Q9Ar15eKirlHHj1P/vM8+okMutTRt4/nlYvlx9YahZU/3kJ4vp0/9elv9T+IvFhAnF1+fPaQGqa/X15a3uvlv93rr13+sHDiy+f37ZEFBNYDeu79Hj7/X33aeWPf64zI9hQ7q+1aOioliwYAF5eXkMGzaM8ePHF1mflpbG9OnT+fPPPzGZTIwZM4YhQ4YA8OGHH/LZZ59hMBho2bIlCxcuxFPPr23O5MwZCAoiLk59KRwyBDp2VBOTjRhh5n6kpqnCfvfcY5tPN0e3bh2sWaN6eNWuXeJmmZnq9fziC1Xte9Ys23ZucnVVPZXr1oXFi+HyZfjvf8vZa9ndXR2kVy81z0Thk4C6grrxMsWl0PfH7t2Lj9qvVu3v33v1An9/AC5duEC9evWKJpjw8OLNW9e3B/4ez1FY4YGgw4apq6E1a+D8edi4Uc2DIvSl6SQ3N1fr2bOnlpiYqGVlZWkRERHaiRMnimyzfPlybfHixZqmadqFCxe0jh07allZWVpycrLWo0cPLSMjQ9M0TZs0aZK2cePGm57z2LFj1n8iVmD1uOLjtZyYY5q7u6bNmKEW7dqlaaBpb75pZvvt29XKzz8v86kc9TW1hNnYo6I0zcND07p107SsrBL3vXpV07p3Vy/bsmX6xViSG2N//XUVS9++mmY02j6estD1PbNqlaYZDJrWtavVX4hK9163wr66NTHFxMQQFBRE48aN8fDwIDw8nF35VTGvMxgMGI1GNE3DaDRSp04d3K5/wzWZTGRmZpKbm0tmZiZ+fn56hep8mjYl3iuYnJy/r+JDQqB3b1iwAK5cuWH7nj3V3NVVvT7TyZNqToWmTdXVQwkDDVNT1ev5/feq2e6ZZ2wbpjkvvaSuJrZtg7AwM//HVcWTT8L69XD77UWvYIQudGtvSElJISAgoOCxv78/MTExRbZ55JFHmDBhAl27dsVoNLJkyRJcXFzw9/dnzJgx9OjRA09PTzp37kwXC2riZGVlERsba/XnUlGZmZlWi8v14kXqfPEF+2sOAO7H0zOe2FjVjjxunCdff92MF19MZcqU80X2qzd0KH5LlnDqiy/ILqlEh86x21rh2F0vXyZo5EhcTSYS3n6bnJQUNZ7kBsnJbowd24Q//nDnnXf+4K67rmGPp2/ude/aFd54oxYvvdSITp2yWLkykXr1dBqMUQG6v2fuuEP9HD+Oe1ISeV5emHx9K3zYyvJet6pyX5fcxFdffaXNmjWr4PHnn3+uzZ8/v8g227Zt0xYsWKDl5eVpCQkJWo8ePbS0tDTt8uXL2mOPPaZduHBBy87O1iZMmKBt3rz5pud01EtEq8a1Z4+mgfbJ+J0aaNrFi0VXP/ywplWrpml//nnDfufPa5qnp6Y9/XSZTueor6klisQeG6tpt96qad9/X+L2v/+uaUFBmlarlnqZ7am01/2rr9T/ccuWmnbmjA2DspDN3jO5uZrWpo36f01IqPDhKs173Yr76tbEFBAQQHJycsHjlJSUYs1EmzZtIjQ0FIPBQFBQEIGBgZw+fZp9+/YRGBiIj48P7u7uhIaGcujQIb1CdS7Xx0AcudQEX191A7Owf/5T1Wr7xz9u2K9+fTVF6bZtaoOqIv/Ga+vWcOxYidVZjxxR39CNRvj2W+jWzYYxllGfPvDNN+oCqEsXiIuzd0R2kn8X//x59Z934oS9I6p0dEsQbdu2JSEhgaSkJLKzs4mMjCQkJKTINg0aNCA6OhqA1NRU4uPjCQwMpGHDhhw5coSMjAw0TSM6OprmUnhMuT5R0I9/Ni7SizBfs2bw1FOwapWq11fEokVqStKq1JPpn/9U04WaTCV2/9m3T3XScXdX9x3uvtu2IZZHly6wZ48a69elCxw8aO+I7OT++1VGz8hQSeLXX+0dUaWiW4Jwc3Nj7ty5jB07lr59+9KnTx9atGjB+vXrWb9+PQATJ07k0KFDREREMGrUKKZNm4aPjw/t2rWjd+/eDBo0iIiICPLy8hgh9YSUxETw9yfmdy9atTK/yZw56v7d7Nk3rPD1VX1gTaYKdqp3DrW//BLmzVOzwrmYf6t//bXqgu/rq0akm0u6jurOO1VCq15dDRmIirJ3RHbSvr168q6uMGOGvaOpXMrdcOWAHLUN0apxhYZqOXd11EDT/vWvkjebN091i/zppxtWxMVpWrNmmhYZadHpHPU1vamoKM3k7q76qpbQnfXTTzXN3V3T7rxT05KTbRzfTZTldU9M1LTWrTXNy0vTtm7VMSgL2e09Ex//9025vLwy7+6073XNCe9BCJ1s2cKR+V8ApX/bfeEF9a34pZduGP/UtKm6HK/MXV63bIHwcHIaNVIDqsx0Z121ShU8vfde1UJReMyWs2ncWH2Bvv12Nd7s+gV61dO0qbopl5mpqtpu327viJyeJAhn4+XFb6mq+3BJTUygZh6dM0d9+H3zTaEVHh7qJsX27WZuUlQSNWvCHXeQuHq12eqs//qXKmERGqqamCpDqSpfX1Vv8P774ZFHVEWNKstohLNnVZLYuNHe0Tg1SRDO5PJleP55ruw5hLs73HJL6Zs/9ZTaZsaMG245PPWUuiP73nu6hmtTSUmq6B6ogYHff09uoXE4oK6kZs6EF19UJTS2bKlc1Rpq11Z5Pzxc1eR77bUKFPlzZvXqqW9GHTrA8OGqPokoF0kQzuTUKfj3v8mITaB585t3RvLwUDWEDh+G//2v0IqAAFXbZs0auHZN15Bt4uuv1Y3KKVPU/A5QrGiSyaQ+NF9/XeXHdetKn7HVWVWrpgaJP/KI6qTw4otVNEl4e6tL5x49VLXF1avtHZFTkgThTK53cf35ryYW97Z56CHV22XOnBuKYM6YAWvXOne5ApNJ9VLq0wcaNlQTKdWrV2yz7Gx49FE1VfOMGar5Jb9GXWXk7q7+a/Mnkxs3Tr/Z7xxazZpqopQnnih9el5RIkkQzuR6gtibFFTq/YfCXFxg4UI4fRpWriy0om1bGDDAeT8pNU3FP3++KgG9fz+0bFlss/R0deP2f/9Tw0AWLnTe6abLwsVF9UN4+WVVonzECDVmosrx8lJNj23aqPfMtm1V9JKqfCRBOJMzZ8jzqkZybj2LEwSoIn49eqjP0rS0QivS0mDuXNWZ3tkYDGqq0FWrVFOZmZsJV6+60Lu3apdfuVI1t1QlBoMaJ/jmm+pebUSEun9bZX35pXrPTJlSJcYBWYMkCGdy6RLp9ZsAhjIlCINBtb2fPw9vvVVohbu7am9xlgmFNA2WLIHNm9XjiRNVdU8zlwR//QWjRgXx44/q6mHcOBvH6kDyJzratUtN23Dpkr0jspOICPVivP12FW53KxtJEM5kzRpWTVKlBMqSIEA1wQ4dqtqk//rr+kIvLxg/Xn2zSkiwaqhWd+WKegJTp/6dIEqQmKiqLiQkePDFF6ojS1U3Zgx89hn88ovq+evqqt9PmzatdTv20KFqGE+5GAzqD2DePHXT+uGHZXa6m6hCRXkqh2Mn3Klf3+y92JtasAA+/1z1bHr77esLn35aNc6/956accwRHT6sel3Fx6s/8KlTS9z0+HH1LTktDVatSiQsrKnt4nRwgwerGVYjI/U9T2rqBerXr2/14166pN6m58+rWf7q1CnHQQwGeOUVdQN7xgx49ln1bUKYJQnCWWRmwqOPUuv3p2jVqle5DtGypWqRWbFCNcM2a4YahjtwoGrLf+UVxxsYcPIkdOqkvvbu2VNiNVZQ347DwtQN2u++Aw+P8n7VrLzuu0/96Ck29jzBwdZPEKA+yx99VE3otH27GiBYLtOmqfd9/jSocuPaLGlichZJSbBxI9lnzpW5eamwefPU+Ik5cwotnDxZ/cU5UuN0/h/srbeqrkeHDpWaHKKi1I34GjVU0b127WwUp7Cp/DnCY2NVsrjesa988pPDli3wwAO4VNlp+komCcJZXP9L+PWq5WMgzGnYUF09fPyxarkB1F/ahg3QqFHF47SGEyegc2f47Tf1eMoUKGXK2chI1VMrMFAlhzJMmCecUP58GMnJ6jtDhSvGaBr89BNBTzyhrlhFAUkQzuJ6gjiD5WMgSvLii6rFZubMG1b8/rv9Z5/ZsEFNyBAXpxqbb+Ljj1VLQZs26ioiMNAGMQq7u3E+jArNJzZwIGzdintyshqR/9FH1grT6UmCcBZnzqAZDPxBowonCG9vmDVLteF+++31hdnZqq2/SNuTDeXkqJvPw4ZBcLD6i+/Ro9Rd3ntPtUd36aK6cOpwX1Q4sPz5MKpVUxM+VWg4T69enN60SSWIxx9XN7GEJAhnklK/DZqbh7q5XEHPPKPuTxeUA/fwUH0hN21SlTBtbdkyNcbhuefUX3qTJiVuqmmqR9Yzz0C/fvDVV6pQnah6WrZUzYoNG6rqvF99Vf5j5TZsqL4xffYZPPCAWnj5snUCdVKSIJzFK6/w7AMxNG9e4syZZeLlpUZWHzhQqCLyhAlqhOn771f8BJZKT1f/PvOM+ut+++1Sq+hpGkyfrkpIPPqoit2Zy0mJiis8H8aAARWcDyN/sIXBoJo5mzZVo0yr6MhrXRNEVFQUvXv3plevXqwsUghISUtL4+mnn6Z///6Eh4ezsVDt9qtXrzJp0iTCwsLo06cPhyrUyFg5HD9e9gFypXnsMfVHNXs25Oai+r3266fqUuhduOfKFdWttk0buHhRJYU+fUrdJTcXxo5VA7+fe05VcbZGshTOL38+jM6dVSXbFSuscFB/f9X7YeZMNbjmzz+tcFAnU+556m4iNzdX69mzp5aYmKhlZWVpERER2okTJ4pss3z5cm3x4sWapmnahQsXtI4dO2pZ16eHfPHFF7VPP/1U0zRNy8rK0q5cuXLTczrqlIEVjstk0vI6d9FGu63Vpk+3Tkz5vvhCTU36/vvXF3z9tZq78ocfNE2z8mt66pSmvfCCpt19t6a5uKgTP/aYpl27dtNdMzM1bfBgtcu8eZbNKOmo7wdLSOzlk56uaf36qffJa6+VbeZRs3Hn5WnaBx9oWvXqmlavnvqDcUBON+VoTEwMQUFBNG7cGA8PD8LDw9m1a1eRbQwGA0ajEU3TMBqN1KlTBzc3N65du8aBAwcYOnQoAB4eHtSuyo3M589j+GEv1XOvWPUKAtQFQ+fO6st8ejrqm9LZs2pqsoq4ckWVWp427e8p7a5dUyVGa9RQbURRUeoyoEaNUg917Zoqo7NpE/z73yrWqlCRVZRd4fkwZs0yM+VuWRkM6t7cwYOqLavI9IyVn24jqVNSUggoNKOXv78/MTExRbZ55JFHmDBhAl27dsVoNLJkyRJcXFxISkrCx8eHmTNncvz4cW6//XZmz55NdUcb5WsrZ86ofwhiZAXGQJhjMKhKG126wNKlMHOm4e86HpmZZTtYTo66HN+zR/VCystTTUf+/uoOYps26qZfGW4aXLyoZkj76SdVtHXUqLKFJKqe/PkwvL3V9LIXL6rbahWqbN+qlSopn59tDh4ET0/VRluJ6ZYgNDNp23DD1769e/cSHBzM2rVrSUxMZPTo0XTo0IHc3FyOHTvGnDlzaNeuHa+++iorV65kypQppZ4zKyuL2NhYqz4Pa8jMzKxQXLX27SMQSKQJBsPvxMZatwqljw/06BHIa69Vp3v3U3jXyaXx+PGYfHzI/Mc/zMbukpZG9V9+ofpPP6F5eXF+0iQAmm3aRG79+qQ//TTp99xDxh13oHl5qaGvZXT+vBtjxzYmIcGDf//7D+6991qZDlPR192eJPaKmzgR8vLqs3y5L0lJV1m8+E88PEq+nLA4bk0j6Mkn8YqNJeWll7g8YoTdL2l1e83L3XB1EwcPHtTGjBlT8HjFihXaihUrimwzbtw47cCBAwWPH3vsMe3IkSPaX3/9pfXo0aNg+YEDB7Rx48bd9JyO2m5b4bjeeEPTQLvF+6J1AjLjt9/UbYEXXri+4LnnNM3DQ4uLiiq64ZIlRe8heHho2rBhf683mawSz6lTmtasmabVqKFpO3eW7xiO+n6whMRuPW+9pd6qoaGl3+4qU9znzqkDgqYNGqRpFy5UPNAKcLp7EG3btiUhIYGkpCSys7OJjIwkJCSkyDYNGjQgOjoagNTUVOLj4wkMDMTX15eAgABOnz4NQHR0NM2bN9crVMdXuza/1b6fgNbeup3i9tvV+KBly64P2n7mGcjOptG0aapPeG6u2vDcOVUJc84c1Wf88mX49NO/D+RS8bfU0aOqyevyZdUzpWfPCh9SVGHPP6/mw9i504rzYQQEqNnp3nhD3Wtr105N21jZlDvtWGDPnj1aaGio1rNnT+29997TNE3TPv74Y+3jjz/WNE3TkpOTtdGjR2v9+vXTwsPDtc2bNxfJaoMGDdL69eunTZgwQbt8+fJNz+do31zyWSOuBg00bfRoKwRTijNnNM3TU9NGjbq+YMAAzeThoWndu6tvTDawf7+m+fio5/vbbxU7lqO+HywhsVvfxo3qgrdtW/Nv53LH/fPP6o8mN7diAVaAXlcQuiYIW3PUN2ZF47pyRV3Jvv66lQIqxQsvqNajX3/VNC03Vzt2+LD+J71u507VpNSsmaadPl3x4znq+8ESErs+duxQ77HmzYu/x6wSd3Kypg0YoGnx8RU/Vhk4XROTsB63u9ryIous3sXVnJkzoVYt1UUQV9dSRzVb0+efq+mCmzVTpRNuucUmpxVVzIMPqqamixdVM+bRo1Y+wbFjqum1XTv45BMrH9z2JEE4OqOR6qd+w4U8mySIevVU3/Evv1Qf1Lbw4YequsFdd6kesg0a2Oa8omq67z5Viy8vT91eO3DAigfv0UPV0b/tNnjoITWG4to1K57AtiRBOLrrZb7PGppgq/v0kyerD+kZM/SfaGvpUhg9Wt2I3rlTdbkVQm9t28IPP6hpS0NCClU1toZbblGDQGfPVt9+Zs2y4sFtS6YcdXTXE0RuoyBbtfZQvboarfzUU7BpUx3d6pR98omaH3vIEFi3To07EsJW8pszQ0NVGbA33qhJcLCVDu7urt7cvXqpAaKgejyZm2viyBH17z/+oYaBF1ajBuzbp35/6SVVo78wPz/YscNKQRcnCcLRXU8Q1VqVXP5aD2PGwFtvwZw5DXWdImLMGDXK1U3eicIOGjZUzU19+8KUKYHUrq26e1tNt25//+7jQ6m1+n19i68vXHXAz6/4ep0vueXP0sHl+Tcg0qU/9e9oaNPzurmpaRnWrTtLoE7TtNWpo24aSl0lYU/16qkJp3r1SueJJ2pw+TJcLwxgXWPGqJ+STJyofkrywgvqx4YkQTi4xDv60T+vH/+5zfbn9vWF3r3TrHfZLYSDqlkTVqxI4h//aM3kyWow3dy58uVFblI7uONHVd0lW/RgEqIq8/DQ+PRTVRDylVdgypQqO09QAbmCcHD3jWrFMnrTqtW79g5FiErPzU2V5fD2VqXlL19Wj6vqPbIq+rSdhMlEzYuJZHnWwdfX3sEIUTW4uKgOGvXqqZJjV67A//6npumtaqSJyZElJ+OWl0NuwyZVvi1UCFsyGNScVu+8A1u2qF5OaWn2jsr2JEE4sutdXN2a2baLqxBCefZZNXQhKkoN5rxwwd4R2ZYkCAeWEacSRK02QXaORIiq69FHVa2wmBhVmuOPP+wdke1IgnBgCYamLOMZ/DpKghDCniIi1CDmpCRV5O/kSXtHZBuSIBzYIfd7eY5ltGhf096hCFHlde+uJrBKS1NJIibG3hHpTxKEA0v85TwehhybFekTQpSuQwdVYcDNTVXRyC+TVFlJgnBgIz94kK+qDZEidkI4kOBgVQm2fn1Vi+/rr+0dkX4kQTgwn7QzpPtKDyYhHE1QkKoE26KFuj+xYYO9I9KHrgkiKiqK3r1706tXL1auXFlsfVpaGk8//TT9+/cnPDycjRs3FllvMpkYOHAgTz31lJ5hOqS8S1eolXcFQxNJEEI4In9/NcHVPffAiBFqxHVlo1uCMJlMzJ8/n1WrVhEZGcnWrVs5ecOt/3Xr1tG8eXO++OILPvroIxYtWkR2dnbB+rVr19K8ijbAJx9IAsCrlfRgEsJReXvDN9+oOSXGjlVTPlQmuiWImJgYgoKCaNy4MR4eHoSHh7Nr164i2xgMBoxGI5qmYTQaqVOnDm7Xi54kJyezZ88ehg4dqleIDi35JzUGol57uYIQwpFVr65GWw8fDtOnqwnk9J6J0VZ0q8WUkpJCQEBAwWN/f39ibugX9sgjjzBhwgS6du2K0WhkyZIluLionPXaa68xffp0jEajxefMysoiNjbWOk/AijIzM8sc154/vPmE1xnQ2MWuz6k8sTsKid0+nEG5jzgAACAASURBVDX2isY9Zw5oWgALF9bl9OlLzJmTjIuN7vLq9ZrrliA0MynUcENBob179xIcHMzatWtJTExk9OjRdOjQgQMHDuDj40ObNm348ccfLT6np6cnwQ44eUFsbGyZ43rXFf6vzv283s++NenLE7ujkNjtw1ljt0bcn3yiJn1btKguLi51+e9/1eyjeqtI7KUlFt0SREBAAMnJyQWPU1JS8PPzK7LNpk2bGD9+PAaDgaCgIAIDAzl9+jQHDx5k9+7dREVFkZWVxbVr15g2bRpvVLYGvlKkHfydLrfUwGBoZO9QhBAWMhjg9dehbl2YMUNVgv3sM9UM5Yx0uwBq27YtCQkJJCUlkZ2dTWRkJCEhIUW2adCgAdHR0QCkpqYSHx9PYGAgL7zwAlFRUezevZu33nqL++67r0olB4BnfnmSxecetXcYQohyeOklNdf6tm0QFqYShTPS7QrCzc2NuXPnMnbsWEwmE0OGDKFFixasX78egJEjRzJx4kRmzpxJREQEmqYxbdo0fHSehNsZGI0QkH2Gyw162DsUIUQ5jR+v5l1/7DHo0QOef16/5uLatT10mRpY1wmDunXrRrdu3YosGzlyZMHv/v7+rF69utRj3Hvvvdx77726xOeofj+Wyx38gbG59GASwpmNGKGSxJAh8Pjj+p3n7rsb0L+/9Y8rM8o5oMT9f9KePGq3lTEQQji7sDBVIjw1Vb9zXL2aCLS2+nElQTigCwfPAOB7t1xBCFEZeHurH73Exuoz8EJqMTmgHy+34nnf/8Pj3vb2DkUIUYXJFYQDOnDGj4AOj4CvvSMRQlRlFl9B/PzzzwXF9C5evEhSUpJuQVVleXlQ49gBHqxzwN6hCCGqOIsSxLJly1i1alVBRdacnBymT5+ua2BV1R9/wMyseTz2w9P2DkUIUcVZlCB27NjB8uXLqVatGqC6p5alRpKwXFwcNCERguQGtRDCvixKEO7u7hgMhoJaSunp6boGVZUdj9UI4gzVW0sXVyGEfVl0k7pPnz7MnTuXq1ev8umnn7Jx40aGDx+ud2xVUmLMZWpxDa21XEEIIezLogTx5JNP8sMPP1CjRg3i4+OZNGkSnTt31ju2Kunqb2oeCIM0MQkh7OymCcJkMvHkk0/y4YcfSlKwgT1nb+XVXt/xcjfnK5cshKhcbnoPwtXVFS8vL9LS0mwRT5VmNELc2RrwwAPgK4MghBD2ZVETk6enJxEREdx///1UL1TY/OWXX9YtsKroxAnoxh5CLl0Ahtg7HCFEFWdRgujevTvdu3fXORQRFwcTWM7dGw7Cm5IghBD2ZVGCGDRoENnZ2SQkJABwyy234G6LefSqmLg46EUibs2li6sQwv4sShA//vgjM2bMoFGjRmiaxrlz51i0aBEdO3bUO74q5fhxGO+aiGvT3vYORQghLEsQixYt4oMPPqBZs2YAxMfH88ILL7Bp0yZdg6tqTsVm42c6B02ki6sQwv4sGkmdk5NTkBxANTHl5OToFlRVpGmQ/vtZXNAkQQghHIJFVxBt2rRh1qxZDBgwAIAvv/ySNm3a3HS/qKgoFixYQF5eHsOGDWP8+PFF1qelpTF9+nT+/PNPTCYTY8aMYciQIZw7d44XX3yR1NRUXFxcGD58OE888UQ5np7z+PNPOJYexP/NP82jg3ScWUQIISxkUYL4xz/+wbp16/joo4/QNI2OHTvy8MMPl7qPyWRi/vz5rFmzBn9/f4YOHUpISAi33nprwTbr1q2jefPmrFixgosXLxIWFkZERASurq7MmDGD22+/nWvXrjFkyBA6d+5cZN/K5vhxyMOVhp1vgbr2jkYIISxMELm5uTz++OOMHj0aUB/+2dnZpe4TExNDUFAQjRs3BiA8PJxdu3YV+ZA3GAwYjUY0TcNoNFKnTh3c3Nzw8/PDz88PgJo1a9KsWTNSUlIqdYKIi4PebOfub3+DHi/A9cKIQghhLxYliFGjRrFmzRpq1KgBQGZmJk8++ST/+9//StwnJSWFgICAgsf+/v7ExMQU2eaRRx5hwoQJdO3aFaPRyJIlS3BxKXpb5OzZs8TGxtKuXbubxpmVlUVsbKwlT8mmMjMzbxpXdLQ/I1w3UGP5ZmIfDrdRZDdnSeyOSmK3D2eN3VnjBv1ityhBZGVlFSQHgBo1apCRkVHqPppWfBJtww3fivfu3UtwcDBr164lMTGR0aNH06FDB2rWrAmA0Whk0qRJzJo1q2BZaTw9PQkOdrwaRrGxsTeN6/x5aF0jCbfmzR3qOVgSu6OS2O3DWWN31rihYrGXllgs6sVUrVo1jh49WvD4119/xcvLq9R9AgICSE5OLnickpJS0GyUb9OmTYSGhmIwGAgKCiIwMJDTp08DqufUpEmTiIiIIDQ01JIwndrx4xDEGenBJIRwGBZdQcyaNYvJkyfj5+eHwWDgr7/+YsmSJaXu07ZtWxISEkhKSsLf35/IyEjefPPNIts0aNCA6OhoOnToQGpqKvHx8QQGBqJpGrNnz6ZZs2YF9z0qs4wMSDyj4eueCE0cp3lJCFG1lXoFERMTw/nz57njjjvYtm0bffv2xdXVla5duxIYGFjqgd3c3Jg7dy5jx46lb9++9OnThxYtWrB+/XrWr18PwMSJEzl06BARERGMGjWKadOm4ePjwy+//MKWLVvYv38/AwYMYMCAAXz33XfWe9YO5sQJqMtF3HIzIUjKbAghHEOpVxDz5s1jzZo1ABw+fJgVK1YwZ84cYmNjmTt3Lm+//XapB+/WrRvdunUrsmzkyJEFv/v7+7N69epi+3Xo0IG4uDiLn4Szi4uDi9Tj1x8zuKNNnr3DEUII4CZXECaTCW9vNWjrq6++YsSIEfTu3ZspU6Zw5swZmwRYFRw/rv699XZPqFbNvsEIIcR1pSaIvLw8cnNzAYiOjua+++4rWGcymfSNrAqJi4NRvlupPmMSZGXZOxwhhABu0sQUHh7Oo48+St26dfHy8qJDhw4AnDlzxqJup8IycXEwo9pu+OADWLrU3uEIIQRwkwQxYcIEOnXqxPnz5+ncuXPBOIa8vDzmzJljkwBt4uhRuHIF7r/f5qfWNJUgmvslqi6uMoJaCOEgbtrN9c477yy27JZbbtElGLsZO1Z9Uu/fb/NTnzsHaWnQoO4ZaC5jIIQQjsOigXKVXlgY/PQTXLhg81Pnd9byvpooXVyFEA5FEgSoBKFpsGOHzU8dFwdu5ODm4SoJQgjhUCwaSV3pdegAPj6wbRs89JBNTx0XB5413DGc+xMMxetXCSGEvcgVBICrK4SGwu7d6krCho4fh5YtwcUFuUEthHAokiDyLV6sejPZ+EM6Lg4ervkFDBoEly7Z9NxCCFEaSRD5GjeG2rVtesrMTEhIgA4uB2HLFpCxJUIIByIJorD//hemTLHZ6U6eVC1aTTgDDRuCu7vNzi2EEDcjCaKwuDh49124etUmp8uvweSbnijzQAghHI4kiMLCwiA3V92stoH8MRA1LsoYCCGE45EEUVinTlCrluruagNxcRAYCC4NG0CbNjY5pxBCWErGQQDz58MDD0D37u7w4IOwfbu6OaBzj6a4OGjdGtgRpet5hBCiPOQKAjWAetSo65W2+/dXAxN0vg+haeoeRKtWup5GCCHKTdcEERUVRe/evenVqxcrV64stj4tLY2nn36a/v37Ex4ezsaNGy3e15rmzYMzZ2D5clSm2LED6tTR9ZwpKSoH9c6NhI4dVQBCCOFAdEsQJpOJ+fPns2rVKiIjI9m6dSsnT54sss26deto3rw5X3zxBR999BGLFi0iOzvbon2t6cEH1c+rr6qq3wAYjbqdD/6+Qd0y7zj8/LPuCUkIIcpKtwQRExNDUFAQjRs3xsPDg/DwcHbt2lVkG4PBgNFoRNM0jEYjderUwc3NzaJ9re3111Ux1zfeAJYsAT8/SE/X7Xz5CaJhbqK6MS4JQgjhYHS7SZ2SkkJAQEDBY39/f2JiYops88gjjzBhwgS6du2K0WhkyZIluLi4WLSvOVlZWcTGxpYr3urVoU+fhrz5Zi2G/7MObdPTSfzoI4wPPFCu4xWWmZlZLK59+/zw8qqLduYomQEBxOcPinAw5mJ3FhK7fThr7M4aN+gXu24JQjNT9M5wQ6+gvXv3EhwczNq1a0lMTGT06NF06NDBon3N8fT0JDg4uNwxv/02BAfDf+Ie5u1qz9Lk2DF46qlyHy9fbGxssbjOn1c3qGtfuggtWlQobj2Zi91ZSOz24ayxO2vcULHYS0ssujUxBQQEkJycXPA4JSUFPz+/Itts2rSJ0NBQDAYDQUFBBAYGcvr0aYv21cOtt8L48bB8jRfGe7qr7q46iYu73oOpfXvVx1YIIRyMbgmibdu2JCQkkJSURHZ2NpGRkYSEhBTZpkGDBkRHRwOQmppKfHw8gYGBFu2rlzlzwMMDPrsaBr//DqdPW/0cWVkQH399DMQHH8BLL1n9HEIIUVG6NTG5ubkxd+5cxo4di8lkYsiQIbRo0YL169cDMHLkSCZOnMjMmTOJiIhA0zSmTZuGj48PgNl9bSEgAKZOhXmvDiBkmoEmOtw8PnkS8vJkDIQQwrHpOpK6W7dudOvWrciykSNHFvzu7+/P6tWrLd7XVqZPh+XLg3jy8HPsqGf94+f3YOpw6RsIeFw1Zd15p/VPJIQQFSAjqc2oXRtefhkO7rzAby99dH2ItfXkJ4gmpgQ1Yu76VZMQQjgSSRAlmDABBvruo83ix8nbu8+qx46Lg0aNwOuvRDXdacOGVj2+EEJYgySIEnh6woMLepCNO3FLrdubqaAGU2KiyhRuUjNRCOF4JEGUYviYmhyq0RW+3k52tnWOqWmFurieOSMTBQkhHJYkiFK4ukLt4WEEZ8fw8Rt/WuWY58/D5cvXE8SDD8LgwVY5rhBCWJskiJtoPSUMgOjF33PtWsWPl3+DunVr1KCL55+v+EGFEEIHkiBuwtC2DYc2xbPyygiWLKn48fJLLrVqnmv13lFCCGFNkiBuxmCg/aCmDBoE//qXaiKqiLg48PKCJsk/qV927rROnEIIYWWSICyRkMCHxmHcdu0nXnutYoeKi4MWLcDlbKJa0KBBxeMTQggdSIKwRJ061N65idnttvLee5CQUP5DFcxDnXg9QUgvJiGEg5IEYYm6deG+++itbcfFBebOLd9hsrNV7b+CLq5166rJgoQQwgFJgrBUWBgeMT8zc+x5/u//wIL5i4o5dQpMpkKD5OTqQQjhwCRBWCosDDSNqXfsoE4dmDmz7Ico0sV12DCYONGqIQohhDVJjQdL3X03dOtGzdquzJyppnD47jsoS8HZ/C6uLVsCHR7XJUwhhLAWuYKwlIsL7NkDI0bw3HOqhNJLL6nSGZaKi1OdlmpXy1E3I6xVv0MIIXQgCaKssrOplpvGK6/Ajz/C5s2W71pQgykuDpo3h88/1ytKIYSoMEkQZZGWBvXrwzvvMGqUupcwaxbk5t58V01TTUxFurgGBekZrRBCVIgkiLKoVUvdQNi+HTc3eO019aH/4Yc33zU1FS5dKtSDCaQXkxDCoemaIKKioujduze9evVi5cqVxdavWrWKAQMGMGDAAPr160dwcDCXL18G4MMPPyQ8PJx+/foxdepUshylblFYGOzbB1euMHAg3HcfvPIKpKeXvlt+D6aCMRDu7moCbCGEcFC6JQiTycT8+fNZtWoVkZGRbN26lZMnTxbZZuzYsWzZsoUtW7YwdepUOnbsiLe3NykpKaxdu5aNGzeydetWTCYTkZGReoVaNmFhajDDrl0YDLBoEfzxB7zzTum7FUkQiYkQGKhufAshhIPS7RMqJiaGoKAgGjdujIeHB+Hh4ezatavE7SMjI+nXr1/BY5PJRGZmJrm5uWRmZuLn56dXqGVz331Qpw5s2wbAAw9A377w+uuqCakkcXFqlrqgIODJJ2HBAtvEK4QQ5aTbOIiUlBQCCjWh+Pv7E1PC8OOMjAy+//575syZU7DtmDFj6NGjB56ennTu3JkuXbrc9JxZWVnExsZa5wmUovbs2WQHBZF5/VzjxnmybdstTJ9+gRdeKF7uNTMzk59/TqNJE3d+/z1e9XVt0ABsEGtFZWZm2uQ11YPEbh/OGruzxg36xa5bgtDMDBAwGAxmt/3222+566678Pb2BuDKlSvs2rWLXbt2UatWLSZPnsyWLVsYMGBAqef09PQkODi44sHfzA3nCA6GRx+Fdevq88or9QkMLLp5bGwsf/xRizvugOAWLeCHH6BNG6hXT/9YKyg2NtY2r6kOJHb7cNbYnTVuqFjspSUW3ZqYAgICSE5OLnickpJSYjNRZGQk4eHhBY/37dtHYGAgPj4+uLu7ExoayqFDh/QKtew0Db7+Gr79tmDR/PmQl6duWN8oJ6dQkb4//oDu3WHTJltFK4QQ5aJbgmjbti0JCQkkJSWRnZ1NZGQkISEhxbZLS0vjwIED9OzZs2BZw4YNOXLkCBkZGWiaRnR0NM2bN9cr1LIzGOCFFyg8OUTTpqq00po1xVuOzp71IDdXxkAIIZyLbgnCzc2NuXPnMnbsWPr27UufPn1o0aIF69evZ/369QXb7dixg86dO1O9evWCZe3ataN3794MGjSIiIgI8vLyGDFihF6hlk9YGERFgdFYsGj2bKhRQw2eK+z0aQ+gUBdXkDEQQgiHp2uxvm7dutHthmp2I0eOLPJ48ODBDB48uNi+kyZNYtKkSXqGVzFhYfDmm6o+0/Xmsfr1Yfp0NV9EdDR06qQ2TUgolCB2yiA5IYRzkI745dWlC1SvXtDdNd/zz4O/f9FCfvHxnvj7q96xJCaqTFLoikkIIRyRJIjy8vKCHj3gp5+KLK5ZU11BfP89fPWVWpaQ4KHuPwBMmgQffWTbWIUQohwkQVTEhx+qtqQbjBsHt96qJhUymdQ9iFatrq+87TbVPCWEEA5OEkRF1K8Prq7FFru7w6uvwq+/wttvw+XLbipBaBp8/DHcUHJECCEckSSIilqwACZMKLZ42DC4666/pyZt1Qq4fBkeeQS+/NK2MQohRDlIgqio5GRYuxZuqDbr4qIK+eUvbt0a6eIqhHAqMid1RYWFwbJlsHcvFBrsB/Dgg+pn7948mjZ1gUjp4ipEeeXk5HD27FkyMzN1O76z1mKyJHYvLy8CAwNxd3e3+LiSICqqe3fw8FDdXW9IEADr1sHOnYm4ujaViYKEqICzZ89Sq1YtmjZtWmJdt4rIyMigWrVqVj+uLdwsdk3TuHDhAmfPnuWWW26x+LjSxFRRNWqomt/bt5td7ecH7dtnqAeJiarmt6OULhfCiWRmZlKvXj1dkkNlZzAYqFevXpmvviRBWMNDD0GHDqoqX2mmTVNNUfIGF6JcJDmUX3leO2lisoYnn1Q/N+PnJ1cPQginIVcQ1qJpqpR3aZYuhf37bROPEEIXO3bsoFWrVpw6dcreoehOEoS1TJumRkmX1MyUna0KNX39tW3jEkJY1datW7n77rv5Kr+Wjg5MJpNuxy4LaWKylvvvh7fegh9/VIX8bnT2rLrKkB5MQlTY2rWwerV1j/noo66MHVv6NkajkYMHD7J27VomTJjAc889B8B//vMfvvjiCwwGAw888ADTpk3jzJkzzJs3j4sXL+Lq6srSpUs5d+4cq1ev5v333wdg/vz5tGnThsGDBxMSEsLgwYP54YcfePTRRzEajXzyySfk5OQQFBTE4sWLqVatGqmpqcybN4+kpCQAXnnlFXbv3o2vry9PPPEEAEuWLKFevXo8/vjjFXpNJEFYS8+equzGtm3mE4QMkhPC6e3cuZOuXbtyyy234O3tzdGjR0lNTWXXrl18+umnVKtWjcuXLwMwbdo0xo8fT69evcjKyiIvL49z586VenxPT8+C+XIuXbrE8OHDAfWBv2HDBh577DFeffVVOnbsyLvvvovJZCI9PZ3atWszffp0nnjiCfLy8oiMjOSzzz6r8POVBGEt3t5qAojt21X5jRvJTHJCWM3jj6sfa8rIuHmzTmRkZMG39L59+7J161Y0TWPw4MEF4xC8vb25du0aKSkp9OrVC1Af/Jbo27dvwe8nTpzg3//+N2lpaRiNRrpc/+K5f/9+Fi9eDICrqyu1atXCzc0Nb29vjh07RmpqKrfddht169a1/MmXQBKENYWFwcsvQ0qKmhSisPwriMBA28clhKiwS5cusX//fk6cOIHBYMBkMmEwGAgNDbW4C6mrqyt5eXkFj7NuKNFTeLDbjBkzeO+992jdujWbNm3ipxumFrjRsGHD2LRpE6mpqQwZMqQMz6xkut6kjoqKonfv3vTq1YuVK1cWW79q1SoGDBjAgAED6NevH8HBwQWXZ1evXmXSpEmEhYXRp08fDh06pGeo1jFyJGzcCLVrF183a5a6ivDysn1cQogK+/rrrxk4cCDffvstu3fv5rvvviMwMJA6deqwceNGMjLUgNjLly9Ts2ZNAgIC2LlzJwDZ2dlkZGTQqFEjTp06RXZ2NmlpaUSbmS4gn9FoxNfXl5ycHL4sVOCzU6dOfPzxx4C6mX3t2jUAHnzwQb7//nt+/fXXgquNitLtCsJkMjF//nzWrFmDv78/Q4cOJSQkhFtvvbVgm7FjxzL2+l2h3bt38+GHH+Lt7Q3AggUL6Nq1K2+//TbZ2dm61V+xqmbN1I85bm7QuLFt4xFCWE1kZCTjxo0rsiw0NJRTp04REhLCkCFDcHd3p1u3bkydOpXFixczd+5cli5diru7O0uXLqVx48aEhYURERFB06ZNue2220o83+TJkxk2bBiNGjWiZcuWGI1GAGbPns2cOXPYuHEjLi4uvPLKK7Ru3RoPDw/uvfdeateujauZaQjKRdPJwYMHtTFjxhQ8XrFihbZixYoSt586dar2ySefaJqmaWlpaVqPHj20vLy8Mp3z2LFj5QvWmk6d0rR//UvTTKaCRceOHdO0efM0bfNm+8VVTg7xmpaTxG4fesWu92uSnp6u6/H1lJ6erplMJq1///5afHx8iduZew1Le111a2JKSUkhICCg4LG/vz8pKSlmt83IyOD7778nNDQUgKSkJHx8fJg5cyYDBw5k9uzZpKen6xWqde3fD9Onw8GDfy/TNFi8WM1DKoQQVnbq1Cl69epFp06daNq0qdWOq1sTk6ZpxZaVdCPn22+/5a677ipoXsrNzeXYsWPMmTOHdu3a8eqrr7Jy5UqmTJlS6jmzsrLsXq7XNSiIFgYDqWvXklqjBgC5ycmQkUGyhweXnKyccGZmpt1f0/KS2O1Dr9hzcnIK2vn1oGmarsfXU7Nmzdi6dStAqc+hrCXNdUsQAQEBJCcnFzxOSUnBr4Q6RJGRkYSHhxfZNyAggHbt2gEQFhZm9ib3jTw9PQkODq5g5FbQoQO+v/yC7/VY4o8eBSDg3nsJcIT4yiA2NtYxXtNykNjtQ6/YY2NjdS3HXZnLfedzd3cv9n9TWsLQrYmpbdu2JCQkkJSURHZ2NpGRkYSEhBTbLi0tjQMHDtCz0FwKvr6+BAQEcPr0aQCio6Np3ry5XqFaX1iYamq6dAkA9z//VMtlkJwQwonodgXh5ubG3LlzGTt2LCaTiSFDhtCiRYuCUYIjR44EVOGrzp07U7169SL7z5kzh2nTppGTk0Pjxo1ZuHChXqFaX1iYmm/08GHo0QPXS5fUHKSSIIQQTkTXgXLdunWjW7duRZblJ4Z8gwcPZvDgwcX2DQ4OZtOmTXqGp59774ULF6BmTQAuDx9Og1mzVFdXIYRwEvKJpQdX14LkUKAM88AKIRxPcHAwLVu2LHj87rvvUqNGDSZNmsRvv/3GoEGDmDt3rtl9v/32W5YuXUpeXh65ubk8/vjjPPTQQ7YKvdwkQejl8GGYOBHefx+/N9+Ee+5Rj4UQTsnLy4stW7YUWZaens7kyZM5ceIEJ06cMLtfTk4Oc+bMYcOGDQQEBJCdnc3Zs2crFIumaWiahouLvjM2SILQi68vREfDtm3U2boVPDzsHZEQlUv37sWXDR+uvoilp0OhwncFRo1SP6mpMHRo0XXbtpU5hOrVq9OhQwcS84txmmE0GjGZTAXd+D08PGh2veKCudLdd911F2vWrGHjxo0ADB06lFGjRnH27FnGjRvHvffey+HDh3n33XeJj4/nnXfeITMzk6CgIBYuXEiN693rrUEShF4aNYK2beHzz3G7cEFuUAvh5DIzMxkwYAAAgYGBvPvuuxbt5+3tTUhICD169KBTp050796dfv364eLiYrZ092+//camTZv49NNP0TSN4cOHc88991C7dm3i4+NZuHAhr7zyChcvXmT58uWsWbMGg8HARx99xJo1a3j22Wet9pwlQegpLAz+9S/1u5T5FsK69uwpeV316qWvr1+/+PqbDJIz18RkqQULFhAXF0d0dDSrV69m3759vP7662ZLd//yyy88+OCDBT07e/Xqxc8//0xISAgNGzbkzjvvBODIkSOcPHmSkSNHkpeXh8lkKlhnLZIg9FQ4QcgVhBBVWqtWrWjVqhX9+/enZ8+evP7662a3M1eFIl/h4QCaptG5c2feeust3Qb5yZzUeurcWY1/AEkQQlRRRqORH3/8seDx8ePHadSoEWC+dHfHjh3ZuXMnGRkZpKens3PnTjp06FDsuHfeeScHDx7kzPW5ZjIyMoiPj7dq7HIFoSdPTzCZVOmBW26xdzRCCB2EhIRw7do1cnJy2LlzJ6tXry4yrYGmaaxatYq5c+fi5eVFtWrVCgb+mivd3b59ewYPHsywYcMAdZP6tttuK9bzycfHh4ULFzJ16lSysrIwGAxMmTKFW6z4WWPQSruecTKOWr/GUeOyhMRuHxK77Y6bryrUYjL3Gpb2ukoTkxBCCLMkQQghhDBLEoQQwmlUohZxmyvPaycJQgjhFLy8vLhw4YIkiXLQNI0LFy7g5eVVpv2kF5MQwikEBgZy9uxZzNiUngAAB5VJREFUzp8/r8vxc3JycHfSopqWxO7l5UVgYGCZjisJQgjhFNzd3a3ahfNG0nOsOGliEkIIYZYkCCGEEGZJghBCCGFWpRpJffjwYTw9Pe0dhhBCOI2srKwSq8BWqgQhhBDCeqSJSQghhFmSIIQQQpglCUIIIYRZkiCEEEKYJQlCCCGEWZIghBBCmCUJQkfnzp3jscceo0+fPoSHh/Pf//7X3iGViclkYuDAgTz11FP2DqVMrl69yqRJkwgLC6NPnz4cOnTI3iFZ7MMPPyQ8PJx+/foVTCXpqGbOnEmnTp3o169fwbLLly8zevRoQkNDGT16NFeuXLFjhCUzF/uiRYsICwsjIiKCZ555hqtXr9oxwpKZiz3fBx98QKtWrbh48aJVziUJQkeurq7MmDGDbdu28cknn/Dxxx9z8uRJe4dlsbVr19K8eXN7h1FmCxYsoGvXrmzfvp0tW7Y4zXNISUlh7dq1bNy4ka1bt2IymYiMjLR3WCUaPHgwq1atKrJs5cqVdOrUiW+++YZOnTqxcuVKO0VXOnOxd+7cma1bt/Lll1/StGlT3n//fTtFVzpzsYP6Qrpv3z4aNmxotXNJgtCRn58ft99+OwA1a9akWbNmpKSk2DkqyyQnJ7Nnzx6GDh1q71DK5Nq1axw4cKAgbg8PD2rXrm3nqCxnMpnIzMwkNzeXzMxM/Pz87B1SiTp27EidOnWKLNu1axcDBw4EYODAgezcudMeod2Uudi7dOmCm5sqcH3nnXeSnJxsj9BuylzsAAsXLmT69OkYDAarnUsShI2cPXuW2NhY2rVrZ+9QLPLaa68xffp0XFyc6y2SlJSEj48PM2fOZODAgcyePZv09HR7h2URf39/xowZQ48ePejSpQs1a9akS5cu9g6rTC5cuFCQ1Pz8/KzW1GFrGzdu5IEHHrB3GBbbtWsXfn5+tG7d2qrHda6/fidlNBqZNGkSs2bNombNmvYO56a+/fZbfHx8aNOmjb1DKbPc3FyOHTvGyJEj2bx5M9WqVXPYZo4bXblyhV27drFr1y6+//57MjIy2LJli73DqnKWL1+Oq6sr/fv3t3coFsnIyGDFihVMnjzZ6seWBKGznJwcJk2aREREBKGhofYOxyIHDx5k9+7dhISEMHXqVPbv38+0adPsHZZFAgICCAgIKLhSCwsL49ixY3aOyjL79u0jMDAQHx8f3N3dCQ0Ndaob7AD16tXjr7/+AuCvv/7Cx8fHzhGVzeeff86ePXt44403rNpUo6fExETOnj3LgAEDCAkJITk5mcGDB1tl5j1JEDrSNI3Zs2fTrFkzRo8ebe9wLPbCCy8QFRXF7t27eeutt7jvvvt444037B2WRXx9fQkICOD06dMAREdHO81N6oYNG3LkyBEyMjLQNM2pYs8XEhLC5s2bAdi8eTM9e/a0c0SWi4qK4j//+Q/Lly+nWrVq9g7HYq1atSI6Oprdu3eze/duAgIC2LRpE76+vhU+tkw5qqNffvmFLVu20LJlSwYMGADA1KlT6datm50jq9zmzJnDtGnTyMnJoXHjxixcuNDeIVmkXbt29O7dm0GDBuHm5kZwcDAjRoywd1glmjp1Kj/99BOXLl3igQce4LnnnmP8+PFMmTKFDRs20KBBA5YuXWrvMM0yF/vKlSvJzs4u+DLXrl075s+fb+dIizMX+7Bhw3Q5l5T7FkIIYZY0MQkhhDBLEoQQQgizJEEIIYQwSxKEEEIIsyRBCCGEMEsShBClaN++fcHv3333HaGhofz5558VOuamTZscsvukEDeScRBCWCA6Opp//vOfrF692qrVMoVwZHIFIcRN/Pzzz7z88su8//77NGnSpMi6vLw8QkJCiswd0KtXL1JTU9m9ezfDhg1j4MCBjBo1itTU1GLHnjFjBtu3by94XPiKZdWqVQwZMoSIiAjefvttHZ6ZEKWTBCFEKbKzs5k4cSLvvvuu2bIXLi4uhISEsGPHDgCOHDlCo0aNqF+/PnfffTeffvopmzdvJjw83GwN/5Ls3buXM2fOsGHDBrZs2cLRo0c5cOCA1Z6XEJaQBCFEKdzc3Gjfvj0bNmwocZu+ffvy1VdfARAZGUnfvn0BNafGk08+SUREBKtWreLEiRMWn/eHH37ghx9+YODAgQwaNIjTp0+TkJBQoeciRFnJPQghSuHi4sK///1vRo8ezYoVK3j66aeLbdO+fXsSExO5ePEiO3fuZMKECQC8+uqrjBo1ip49e/Ljjz+ybNmyYvu6urqSl5cHqOKOOTk5Bb+PHz+ehx56SMdnJ0Tp5ApCiJuoVq0aK1as4Msvv+Szzz4rtt5gMPDggw+ycOFCmjdvTt26dQFIS0vD398foKDC6Y0aNWrE0aNHATXpS36C6NKlCxs3bsRoNAJqOtILFy5Y/bkJURpJEEJYwNvbm1WrVrF8+XKz02j27duXL774oqB5CeDZZ59l8uTJPPzww3h7e5s97vDhwwumSD1y5AjVq1cHVILo168fDz30EBEREUyaNKkgWQhhK1LNVQghhFlyBSGEEMIsSRBCCCHMkgQhhBDCLEkQQgghzJIEIYQQwixJEEIIIcySBCGEEMKs/weCUC2MJ0zl2AAAAABJRU5ErkJggg==\n"},"metadata":{}},{"output_type":"stream","text":"Maximum kNN Score is 89.86%\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.svm import SVC # 导入SVM分类器\nsvm = SVC(random_state = 1)\nsvm.fit(X_train, y_train)\ny_pred = svm.predict(X_test) # 预测心脏病结果\nsvm_acc = svm.score(X_test,y_test)*100\nprint(\"SVM 预测准确率:: {:.2f}%\".format(svm.score(X_test,y_test)*100))\nprint(\"SVM 预测F1分数: {:.2f}%\".format(f1_score(y_test, y_pred)*100))\nprint('SVM 混淆矩阵:\\n', confusion_matrix(y_pred, y_test))","execution_count":43,"outputs":[{"output_type":"stream","text":"SVM 预测准确率:: 88.52%\nSVM 预测F1分数: 89.86%\nSVM 混淆矩阵:\n [[23  3]\n [ 4 31]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.naive_bayes import GaussianNB # 导入朴素贝叶斯模型\nnb = GaussianNB()\nnb.fit(X_train, y_train)\ny_pred = nb.predict(X_test) # 预测心脏病结果\nnb_acc = nb.score(X_test,y_test)*100\nprint(\"NB 预测准确率:: {:.2f}%\".format(svm.score(X_test,y_test)*100))\nprint(\"NB 预测F1分数: {:.2f}%\".format(f1_score(y_test, y_pred)*100))\nprint('NB 混淆矩阵:\\n', confusion_matrix(y_pred, y_test))","execution_count":44,"outputs":[{"output_type":"stream","text":"NB 预测准确率:: 88.52%\nNB 预测F1分数: 88.24%\nNB 混淆矩阵:\n [[23  4]\n [ 4 30]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.tree import DecisionTreeClassifier # 导入决策树分类器\ndtc = DecisionTreeClassifier()\ndtc.fit(X_train, y_train)\ndtc_acc = dtc.score(X_test, y_test)*100\ny_pred = dtc.predict(X_test) # 预测心脏病结果\nprint(\"Decision Tree Test Accuracy {:.2f}%\".format(dtc_acc))\nprint(\"决策树 预测准确率:: {:.2f}%\".format(dtc.score(X_test, y_test)*100))\nprint(\"决策树 预测F1分数: {:.2f}%\".format(f1_score(y_test, y_pred)*100))\nprint('决策树 混淆矩阵:\\n', confusion_matrix(y_pred, y_test))","execution_count":45,"outputs":[{"output_type":"stream","text":"Decision Tree Test Accuracy 78.69%\n决策树 预测准确率:: 78.69%\n决策树 预测F1分数: 80.00%\n决策树 混淆矩阵:\n [[22  8]\n [ 5 26]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier # 导入随机森林分类器\nrf = RandomForestClassifier(n_estimators = 1000, random_state = 1)\nrf.fit(X_train, y_train)\nrf_acc = rf.score(X_test,y_test)*100\ny_pred = rf.predict(X_test) # 预测心脏病结果\nprint(\"随机森林 预测准确率:: {:.2f}%\".format(rf.score(X_test, y_test)*100))\nprint(\"随机森林 预测F1分数: {:.2f}%\".format(f1_score(y_test, y_pred)*100))\n\nprint('随机森林 混淆矩阵:\\n', confusion_matrix(y_pred, y_test))","execution_count":46,"outputs":[{"output_type":"stream","text":"随机森林 预测准确率:: 88.52%\n随机森林 预测F1分数: 89.86%\n随机森林 混淆矩阵:\n [[23  3]\n [ 4 31]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.linear_model import LogisticRegression # 导入逻辑回归模型\nlr = LogisticRegression()\nlr.fit(X_train,y_train) \ny_pred = lr.predict(X_test) # 预测心脏病结果\nlr_acc = lr.score(X_test,y_test)*100 \nlr_f1 = f1_score(y_test, y_pred)*100 \nprint(\"逻辑回归测试集准确率： {:.2f}%\".format(lr_acc))\nprint(\"逻辑回归测试集F1分数: {:.2f}%\".format(lr_f1))\nprint('逻辑回归测试集混淆矩阵:\\n', confusion_matrix(y_test,y_pred))","execution_count":47,"outputs":[{"output_type":"stream","text":"逻辑回归测试集准确率： 86.89%\n逻辑回归测试集F1分数: 88.24%\n逻辑回归测试集混淆矩阵:\n [[23  4]\n [ 4 30]]\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"methods = [\"Logistic Regression\", \"kNN\", \"SVM\", \n           \"Naive Bayes\", \"Decision Tree\", \"Random Forest\"]\naccuracy = [lr_acc, kNN_acc, svm_acc, nb_acc, dtc_acc, rf_acc]\ncolors = [\"orange\",\"red\",\"purple\", \"magenta\", \"green\",\"blue\"]\nsns.set_style(\"whitegrid\")\nplt.figure(figsize=(16,5))\nplt.yticks(np.arange(0,100,10))\nplt.ylabel(\"Accuracy %\")\nplt.xlabel(\"Algorithms\")\nsns.barplot(x=methods, y=accuracy, palette=colors)\nplt.grid(b=None)\nplt.show()","execution_count":48,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 1152x360 with 1 Axes>","image/png":"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G2e2bNlijDEmNTXVdOvWzRhz6lzgiy++MMacOt5Pf06j7JztHKxNmzbmt99+M++++6555ZVXjDGnzqd69uxp9u/fb9auXWv69etnTpw4YYz533nT6XMlb52r/P7czBhjNm7caFq3bm1SU1ONMcZ8//33ZsSIEZ7jZsqUKebDDz80//d//2cGDBjgqf/VV181CxYsON+nDr9z+jjKz883Dz30kFm3bp0xxpi8vDyTlZVljDEmIyPD3HnnnaawsNAcOHDAtGjRwnz77bfGGGNGjx5t3G63MabosfHss896Pp8WLVrkOcfevXu36dSpk8nJyTHLli0zd955p8nKyjIZGRnmpptuMm+//bYxxpgZM2Z43nN+78UXXzTt27c3UVFRJioqyqxfv97k5OSYjh07mp9++skYY8yECRM8+3bu3Nm4XC7P/sW9R0ZERJiDBw8aY/533P/+Pbc8YX5CKWzdutVzHU50dLRmz54tSdq2bZteeeUVSVJkZKSee+65M/Zt3bq1XnvtNR08eFBhYWG65pprztlXSkqK+vfv75k6ctlll511u+eee06zZ89WZmam3nvvPUnSnj17tGvXLsXExEg69Y3xFVdcoaNHj+r48eO66aabJEkRERFau3atp6127dp5+tm4caM2btwop9Mp6dTI6t69e9WmTRvNmjVLs2fPVufOndWmTRvl5+crICBAjz32mO644w7dcccdRWrMyspSVlaWbr31VklSz549i0zR6dq1qySpZcuWSk1NPefzAmtkZmZq5MiReumll9S0aVPPtapt2rSRpGK/TR4xYoQWLFighx9+2Gu1wt6qV6+u5cuX64svvtDmzZs1duxYjR8/XuHh4erfv78mTpx4xnRgSQoMDFStWrWUkJCgJk2aqEqVKhfpL0BZqFGjhqKjo7V48eIir+XBgwc1duxY/fbbbzp58qQaNGhwxr49evTQqlWrdNtttykhIUH33nuvjh8/rq1btxb57Dg9ynC2/Z944gkZY/Tkk09q0aJFio2NLbbv3r17a+TIkRoyZIiWLVvmuT5/06ZN2r17t6fdY8eO6dixY7rpppv07LPPKjIyUmFhYapevXqZPGc4N/P/f31x48aN+v777/XJJ59IOnWOsW/fPqWkpKhXr16qWrWqpDPPm2rUqHHRzlVat26tK6+8UtKp42rHjh2eaeo5OTmqW7eu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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# 绘制各算法的混淆矩阵\nfrom sklearn.metrics import confusion_matrix\ny_pred_lr = lr.predict(X_test)\nkNN3 = KNeighborsClassifier(n_neighbors = 3)\nkNN3.fit(X_train, y_train)\ny_pred_kNN = kNN3.predict(X_test)\ny_pred_svm = svm.predict(X_test)\ny_pred_nb = nb.predict(X_test)\ny_pred_dtc = dtc.predict(X_test)\ny_pred_rf = rf.predict(X_test)\ncm_lr = confusion_matrix(y_test,y_pred_lr)\ncm_kNN = confusion_matrix(y_test,y_pred_kNN)\ncm_svm = confusion_matrix(y_test,y_pred_svm)\ncm_nb = confusion_matrix(y_test,y_pred_nb)\ncm_dtc = confusion_matrix(y_test,y_pred_dtc)\ncm_rf = confusion_matrix(y_test,y_pred_rf)\nplt.figure(figsize=(24,12))\nplt.suptitle(\"Confusion Matrixes\",fontsize=24)\nplt.subplots_adjust(wspace = 0.4, hspace= 0.4)\nplt.subplot(2,3,1)\nplt.title(\"Logistic Regression Confusion Matrix\")\nsns.heatmap(cm_lr,annot=True,cmap=\"Blues\",fmt=\"d\",cbar=False)\nplt.subplot(2,3,2)\nplt.title(\"K Nearest Neighbors Confusion Matrix\")\nsns.heatmap(cm_kNN,annot=True,cmap=\"Blues\",fmt=\"d\",cbar=False)\nplt.subplot(2,3,3)\nplt.title(\"Support Vector Machine Confusion Matrix\")\nsns.heatmap(cm_svm,annot=True,cmap=\"Blues\",fmt=\"d\",cbar=False)\nplt.subplot(2,3,4)\nplt.title(\"Naive Bayes Confusion Matrix\")\nsns.heatmap(cm_nb,annot=True,cmap=\"Blues\",fmt=\"d\",cbar=False)\nplt.subplot(2,3,5)\nplt.title(\"Decision Tree Classifier Confusion Matrix\")\nsns.heatmap(cm_dtc,annot=True,cmap=\"Blues\",fmt=\"d\",cbar=False)\nplt.subplot(2,3,6)\nplt.title(\"Random Forest Confusion Matrix\")\nsns.heatmap(cm_rf,annot=True,cmap=\"Blues\",fmt=\"d\",cbar=False)\nplt.show()","execution_count":49,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 1728x864 with 6 Axes>","image/png":"iVBORw0KGgoAAAANSUhEUgAABVoAAAMCCAYAAACYyn1HAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXhNV/v/8U9mITHP2j59aIUaKkQSiaFCzfMQWkNVS6OmUlOrKEVVlaKGqlIdFEUoUjqaog0hhqqhqCJUEEMmGdfvD7+cb05mjlJ93q/rcl3OHtZZe+2Tc699n7XXtjPGGAEAAAAAAAAA7pj9/a4AAAAAAAAAADzoSLQCAAAAAAAAgI1ItAIAAAAAAACAjUi0AgAAAAAAAICNSLQCAAAAAAAAgI1ItAIAAAAAAACAjUi0AgAA3EMHDx5UUFCQfHx8VKVKFXl4eGju3Ln3vB7nzp2Th4eHPDw87vl7wxrnAgAA4N/B8X5XAAAA4E4lJCQoODhY27dv19GjR3X16lXZ2dmpePHiql69upo0aaLmzZurQIEC97uqkqTTp0+rd+/eSkhIkL29vYoVKyZ7e3sVLFjwflftgRAQEKDIyEhJUuXKlbVhw4Zct58yZYo+/fRTy+sffvhBDz300F2pS1hYmHbv3q2qVauqadOmd6VMAAAAPNhItAIAgAfSjz/+qPHjx+vSpUuWZQULFpSdnZ0iIyMVGRmpLVu2aMaMGZo+fbrq1at3H2t7y8qVK5WQkCAvLy8tWLBAhQsXvm91cXJy0n//+9/79v62On78uI4cOaKqVatmuz4lJUWbNm36295/9+7d+uCDD9SxY0ebE60P+rkAAADALSRaAQDAA2ft2rUaO3as0tLS9N///lcDBgxQw4YNVaxYMUlSTEyMdu3apc8//1y7d+9WeHj4PyLReuLECUlSy5Yt72uSVZLKlCmjzZs339c63Kny5cvr/PnzWrduXY6J1h07dujKlSuqUKGCZRTsP9WDfC4AAADwf5ijFQAAPFCOHj2qCRMmKC0tTY0aNdK6devUvn17S5JVktzd3dW8eXN99tlnmjVrlgoVKnQfa/x/bt68KUlMFWCjtm3bys7OThs3blRqamq226xbt86yLQAAAHAv2BljzP2uBAAAQH4FBQXpp59+UpkyZbRp0ya5u7vnuY8xRnZ2dlbLkpKS9MUXXygkJESnTp1ScnKyypUrp6eeekovvviiSpUqlaWctWvX6rXXXpO3t7c+++wz/fjjj1q6dKmOHDmi1NRUPf744+rdu7fatGljtV/GuUUzq1Chgn788UdJsjwMKae5RM+dO6cmTZpIko4dO2a1Li0tTevWrVNwcLCOHz+u2NhYubu7q0SJEqpZs6Zatmyphg0b5qusdL/99puWLFmiPXv26MqVKypUqJCqV6+uwMBANW/ePNt90o/1008/lYeHhxYsWKDvvvtOUVFRKlasmBo1aqQhQ4aodOnS2e6fm/Sy33zzTYWEhGj37t1atGiRGjVqZLVdTEyM/P39ZW9vr+XLl6tjx46Ssm/XAwcO6Pvvv1dYWJguXLigq1evyt3dXU888YS6du2qFi1aWG2fsd1ykv4+mdt4//79WrJkifbt26crV66oZ8+eGjt2bI7nYvv27erfv78kafHixapfv36W91q4cKFmzZolNzc3rV+/PsvxJSUladWqVQoJCdGJEycUHx+vUqVKydfXVy+++KIqVaqU7TF8//33WrlypQ4fPqzr16+rUKFCKlasmKpVq6amTZuqVatWubYBAADA/yKmDgAAAA+MixcvauvWrZKkXr165SvJKilLkjU6OlovvPCCfvvtN0mSs7OznJycdPr0aX3yyScKDg7WokWLVKtWrRzLnDdvnubMmSN7e3sVKlRI8fHxOnDggF599VVdvnxZffr0sWxbrFgxJSYm6vr160pOTpabm5vlAV0ZR+LaYuTIkdq4caPltbu7u2JjY3X16lWdOHFCJ0+etEq05mXlypV68803lZaWJkkqXLiwYmJitHPnTu3cuVPt2rXTtGnT5ODgkO3+f/31l1577TVFRkbK1dVVdnZ2ioqK0ldffaVdu3YpODhYRYoUuePjbd++vXbv3q3169dnSbSGhIQoMTFRbdq0yXU0c1xcnAIDAy2vnZyc5OzsrOjoaMtxduvWTZMmTbJs4+DgoJIlSyo+Pl7x8fFycXHJ8jnMrk1CQkI0cuRIpaSkyN3dPcd2y6hhw4bq0aOHPv/8c7322mvasGGDihYtaln/22+/6YMPPpAkjR07NkuSNSoqSv369dPRo0clSfb29nJ1ddX58+e1du1abdq0STNmzFCzZs2s9ps1a5YWLlxoeV2oUCHdvHlTp0+f1unTpxUWFkai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kJ+fn1JSUizLUlJSVK9ePXl4eOSrjPxeYAcFBWnKlCl3XFcAyE7mOL1p0ybVrVtXu3fvzrJtWFiYPDw8NHHiRKvlzzzzjNauXfu31/V29OrVS1999VWO69Nje//+/a2WjxgxQnPnzs3Xe9xJn+KfJikpSXPnzlWzZs1Uq1YtBQQE6LXXXtO5c+dsLnvx4sXy9vZWRESEevfufcflTJo0SQMHDrS5PpnNnTtXHh4eWZLAn3zyiTw8PPL9Ocjrs5YuIiJCDz/88B3VFcC/W3h4uLp37646derI29tb3bt318GDB+93tbLI67rlww8/VI8ePbIsj46OVvXq1XX8+PE7fu+5c+dqxIgRd7x/dsaMGSMPDw/98MMPVsunTJkiDw+Pv71v83deo//xxx8aMmSIfHx8VKdOHbVt21ZLly61efBRcnKypk2bpiVLligiIkLFihW747L+rrgYEBCg6tWrKzo62mp5+/bt5eHhka8+Tno/MeN1fnbym5v6X0GiFbdtz549ioiI0OzZszV//nybkn85yesP+Z8mIiJCzz33nOrWratvv/1WYWFhevPNN7V9+3aby46MjFTRokVVokSJu1DTv4+7u7vV8W7btk2FCxe+q+/xoH0uADyYgoODNWnSJH344Yfy9vbOdpuCBQtq3bp1dyURl5d78d134MAB7d27929/n3vldttsyJAh+vHHHzVjxgyFh4dr/fr1ql69un7++Web63L+/Hk9/vjjNpfzd3r00Ue1bt06q2Xr16/Xo48+etfegxgOIDexsbEKCgpSz549tXv3bm3fvl2DBg2Ss7Pz/a6alfx8l7Vv314RERFZRimGhISocuXKqly58t9VvTzlVP/McSAlJUWbN2/WI488cq+qdtedOXNGgYGBKleunDZs2KC9e/dq9uzZ+vXXXxUXF2dT2VeuXFFiYqIee+yxu1Tbv0eFChW0adMmy+tjx47p5s2bd/U9iO9ZkWj9B1i1apWefvppeXt7KygoSBcvXrSs27lzp5o3b646derozTffVM+ePS2jBTIOwTfGaOrUqapXr57ll5rjx49r5cqV2rBhgz7++GN5enoqKChIkvXIndTUVC1cuFBNmzaVp6enOnXqpAsXLuRZ7xo1auixxx7TkSNHLMsuXryowYMHy9fXVwEBAVajI27evKnRo0erbt26atmypT766COrXwLT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MX369F0+7801adIkatasGVlZWRERkZ2dnflR8t9hR5d1zpw5MWbMmJg9e3ZUq1YtDjvssDj99NOjd+/eqT5/4cKFcdxxx8WUKVNi3333TTWv3aVJkyax7777xvTp0yMnJyciNvbatm3bxvLly+PDDz/c7jz+nX9T7Lyqe3RBRESUlpbGAw88UNllbOE3v/lNzJ49O2bNmhUFBQUxfPjwyi4pY/369XHOOefEJ598Evfcc0+89dZb8cc//jHq1asX77zzTur5L1iwIH70ox/tgkp3n+9+97sxceLEzOMNGzbEn//85zjssMN22Wds2LBhl80LIK0777wzZs+eHVOmTIkLLrgg7r777ir/C//s2bMz/w4++ODMMs6ePbvCkHVXb5fvvvvuuOWWW+JXv/pV/PWvf43JkyfHKaecEq+88sou/ZwdsWDBgjjkkEN2Scha0Xp6880347zzzotWrVrFyy+/HLNmzYqrrroqpk2blvrzFixYEPvuu+8eGbJuqlatWvGXv/wl83jq1KlRr169XfoZ9h2Af6dv+ubEiRPjvffei7vuuquyS9olnnrqqcz+wLcJWXf3tnj27NlxzjnnRMuWLePFF1+MWbNmxTXXXLNLQsPPP/886tWrt8eGrN/YZ599yi3vtGnTok6dOrv0M/TUyiNoreL+3//7f3HffffFV199VeHrI0aMiPbt20eLFi2iV69e5Ta0Y8aMiaFDh2bm89BDD5V7b48ePeLFF1+MiIi5c+fGeeedFwUFBXHcccfFc889t0P15eTkRLdu3WLu3LmZ5+bMmROnnnpq5Ofnx7HHHhvXXXddrF+/PiI2jsDZfORLv3794v7774+IiMWLF8fAgQPjmGOOiaKionIh85w5c6JXr17RokWLaN26ddx4440V1vTUU0/FwoUL4/bbb48f/vCHUa1atdh3332jf//+0b59+8zynnXWWZGfnx/dunUrd9B46aWXxrXXXht9+/aNvLy86NOnT8ybNy8iIjp37hzz58+Pfv36RV5eXqxfvz6Kiopi5syZFa73devWxdChQ6OwsDDy8/Ojd+/e8cUXX0TExpHBjz32WERElJWVxR133BEdO3aMVq1axfDhw2PVqlUREfGvf/0rmjRpEhMmTIgOHTpEYWFhjBs3bpvfS1FRUfztb3+LlStXRkTEjBkzokmTJrHffvtlppk3b16cffbZUVhYGIWFhTFkyJDM39mwYcNiwYIFmeW8++67M3U89thj0aFDhzjnnHMyz23YsCG+/PLLaNeuXWYky5o1a6JLly7lAl+A3W2fffaJTp06xe9+97uYMGFCfPTRRxGx8Ue4m2++OTp06BCtW7eO3/zmN1FcXJx538svvxw9e/aMFi1aROfOnTM7x5tuqz/77LM488wz4+ijj47CwsK46KKLMu9v0qRJfPbZZxERsWrVqhg+fHgcc8wx0bFjx7jjjjuirKwsIiKefPLJOP300+Pmm2+Oli1bRlFR0bcO80aNGhUXXXRRDB48OPLy8uLpp5+OsrKyuPPOO6Nz585RWFgYF198caYXRGy8/M0pp5wS+fn50bNnz3jjjTcqnPfKlSvj9ttvj2uvvTY6d+4cNWvWjNzc3OjcuXMMGzZsi+nLyspi0KBB0aZNm8jPz4+zzjqr3L7BlClT4oQTToi8vLxo165dpu8vW7YsLrjggsjPz4+CgoL4+c9/nnlPu3btYtasWfGnP/0prr766njzzTcjLy8vxo4dGzNnzoyioqLMtIsWLYr+/ftn9h8efvjhba6nzd1yyy3Ru3fv+MUvfhH169ePrKysaN68eYwaNSozzSOPPBJdunSJwsLC+NWvfhVLliyJiI0HOk2aNIk//vGP0aVLl2jZsmWMGDEiIiKmT58eF1xwQeYUxSuuuGKL2jdd1oiNI2tPPvnkzP7OzTffHBEb//42PXto0aJFceGFF0ZBQUF07do1Hn/88XLLPHjw4Bg6dGjk5eVF9+7d4x//+EeF3/U3evbsGU899VTm8cSJE7cYzfvYY49lvsfOnTtn/m+sWrUq+vXrl1nOvLy8WLZsWYXrftNLTjz99NPRpUuXWLNmTURETJ48OY499thYsWLFNmsF2Bn7779/HHvssfH+++9nnps6dWqcdNJJ0aJFi2jfvn2MGTMm89r2jr+Ki4vj0ksvjZYtW8aJJ564xWCe7R1rXnPNNfGLX/wi8vLy4rTTToulS5fG9ddfHy1btozjjz9+h84iqMijjz4aXbp0iYKCgujXr18sXrw481qTJk3i4Ycfjq5du0bXrl0zdW4tA5g2bVqceOKJkZeXF23bto177703vv7667jgggtiyZIlmW39pp/xjVtuuSVOOumk6Nu3bzRo0CCysrLiiCOOiN///vc7XOsjjzwSXbt2jZYtW8a1114bSZLEzJkz4/zzz898/qWXXlrhZRs2PT7fWoaw6XFsxMYcol+/flFQUBBdunSJRx99NDO/MWPGxK9//esYPnx45OXlRbdu3bY7gKtnz57ljoOfeuqpLXrqE088kempnTp1ij/+8Y8REVtdz2PGjIlBgwbF0KFDo0WLFjFhwoRy2cNzzz0XnTp1itWrV2e+wzZt2sTy5cu3WSvfQkKV1bFjx+TVV19N+vfvn4wcOTJJkiR59NFHkzPPPDMzzcSJE5Ply5cnJSUlyb333pu0bt06KS4uTpIkSUaPHp0MGTIkSZIkmTBhQnLqqadm3vfxxx8nRx99dLJu3bpkzZo1Sbt27ZLHH388KSkpSd59992koKAg+eijjyqs68wzz0weffTRJEmSZN26dcnIkSOTM844I/P6O++8k8yePTspKSlJ5s+fnxx//PHJ+PHjkyRJkr///e9JmzZtktLS0iRJkmTZsmVJ8+bNk6VLlyalpaXJySefnIwZMyZZt25dMm/evKSoqCiZPn16kiRJcsoppyQTJkxIkiRJVq9encyePbvC+i666KJk+PDhW12v69evTzp37pyMGzcuWbduXTJz5szkqKOOSubOnZskSZJccsklScuWLZO///3vSUlJSTJ48ODkoosu2uJ72drjTdf7I488klx44YXJ119/nWzYsCF55513klWrVm2xHh977LGkc+fOybx585LVq1cn/fv3T4YOHZokSZLMnz8/ady4cXLFFVcka9euTd5///2kWbNmySeffFLh8l1yySXJyJEjkyuvvDJ5+OGHkyRJkkGDBiXPPPNMctpppyVPPPFEkiRJ8umnnyZ/+ctfknXr1iXLli1LzjjjjGTEiBFbXa5v6hg2bFiyZs2aZO3atZnnSkpKkiRJkhkzZiStW7dOvvjii+SKK65IBg4cuNXvAWBX2Xx79Y327dtntoMjRoxILrzwwmTFihXJqlWrkgsvvDC59dZbkyTZ2JtatGiR/OUvf0lKS0uTRYsWZbaxm26rL7744uSOO+5ISktLk+Li4uSNN97IfFbjxo2TTz/9NEmSJBk2bFjSr1+/ZNWqVcn8+fOTrl27ZubxxBNPJIcffnjypz/9KdmwYUPy8MMPJ23atEnKysp2ehlHjhyZNGvWLHnllVeS0tLSZO3atck999yTnHrqqcmiRYuS4uLi5LLLLsv0kwULFiQFBQXJ9OnTk9LS0mTatGlJQUFBsnz58i0+b/LkyUmzZs2SDRs2bLWmkSNHJpdcckmSJElSWlqaPPHEE8mqVauS4uLi5Nprr01OPvnkzLSFhYXJW2+9lSRJkqxYsSJ59913kyRJkptuuim59tprk/Xr1yfr1q1LZs2alXlP27Ztk9deey1Jki33f1599dWkY8eOSZIkyYYNG5IePXpk+vqnn36adOzYMZk5c+ZW19OmVq1alTRp0qTc97m5GTNmJMccc0zy3nvvJcXFxcnVV1+dnHXWWUmSJElJSUnSuHHjpF+/fslXX32VzJ8/P2nZsmXm+9q01ooeb76svXr1Sp555plMbW+//XaSJBv7duPGjTPvOfXUU5PrrrsuKS4uzuy7fbP+Ro4cmRx55JHJ9OnTkw0bNiQ33XRTctppp1W4bN/U//HHHyetWrVKVq1alSxfvjxp3bp18v777yc//vGPM9O+8sorybx585KysrJk5syZyZFHHpm8//77W12uitb9pn83SZIkv/71r5PLL788WbZsWdK6detk2rRpW/0eAHbUpn1z4cKFSffu3ZP/+Z//ybz+2mu6FV4bAAAgAElEQVSvJR988EFSWlqavP/++0mrVq2Sl156KUmS7R9//fa3v01OP/30ZMWKFcmCBQuSbt26JW3btk2SZMeONQsKCpJ33nknKS4uTs4666ykY8eOyYQJE5INGzYkI0eOLNfvNrfp/samZs6cmRQUFCTvvvtusm7duuS6664rd4zeuHHj5Nxzz01WrFiRrF27drsZQJs2bTJ98csvv8z07ddeey2zrBX5+uuvk6ZNmyZ//etftzrNjtTat2/fZOXKlcnnn3+eFBYWZnrD5p9fUT2bfvdbyxA2P479+c9/nlx99dVJcXFx8t577yWFhYWZ/YjRo0cnRxxxRDJ16tRkw4YNya233pr06dNnq8vXuHHj5MMPP0xatWqVrFy5Mlm5cmXSqlWr5MMPPyzXx6dMmZJ89tlnSVlZWTJr1qykefPm21zPo0ePTg4//PDkpZdeyvTUTbOHJEmSwYMHJ5dcckmyfPnypE2bNsnkyZO3WiffnhGt/wEGDRoUDz30UIW/RPTs2TPq168fOTk5cf7558f69evjn//85xbTde7cOT744IP4/PPPIyLimWeeiS5dukRubm5MnTo1vvOd70Tv3r0jJycnmjVrFscdd1y88MILW61pxIgRkZ+fHy1atIiHHnooBgwYkHntiCOOiKOOOipycnLikEMOiVNPPTUzYqZ58+axzz77xF//+teI2PirS0FBQey3337xzjvvxPLly2PAgAGRm5sbhx56aJxyyimZX9ZycnJi3rx5sXz58qhVq1YcddRRFdb25Zdfxv7777/V2v/+97/H119/HX379o3c3Nxo1apVdOzYMSZNmpSZpkuXLtG8efPIycmJHj16lPv1c2fk5OTEl19+GZ999llkZ2fHEUccEbVr195iumeeeSbOPffcOPTQQ6NWrVoxePDgeO6558qdDjBgwIDYa6+9omnTptG0adP44IMPtvnZ34xMWbVqVbzxxhvRuXPncq83atQo2rRpE7m5udGgQYM477zztjqyaVMDBw6MvffeO/baa68tXjv22GPj+OOPj3PPPTemTp0a11577XbnB7C7HHDAAbFy5cpIkiQee+yxuPzyy6NevXpRu3btuPDCCzPb/ccffzx69+4dbdq0iWrVqsWBBx4YP/jBD7aYX05OTixYsCCWLFkSNWrUiPz8/C2mKS0tjeeeey6GDBkStWvXjkMOOSTOO++8cqMoDz744DjllFMiOzs7Tj755Fi6dGnmbIed1aJFiygqKopq1arFXnvtFX/6059i8ODBceCBB0aNGjVi4MCB8fzzz0dZWVlMnDgxioqKom3btlGtWrVo165dNG3aNGbMmLHFfL/88sto0KBB5nqd21OtWrXo1atX1K5dO2rUqBEDBgyIf/zjH/H1119n1t3cuXNj9erVUa9evWjWrFlERFSvXj2WLFkSCxcujNzc3CgoKNjpdfD222/H6tWro1+/fpGbmxuNGjWK3r17l+vrm6+nTX3zN7KtfYdnnnkm+vTpEz/+8Y+jRo0aMXTo0HjjjTdi0aJFmWkuvPDC2GeffeKQQw6JgoKCb73vUL169fj0009jxYoVUbt27fjJT36yxTTz58+Pd955J4YMGRI1atSIZs2aRa9evcqNSG3ZsmW0bds2srOzo2fPntvdb9hrr72iXbt28fzzz8ekSZOic+fOUb169XLTFBUVxaGHHhpZWVnRqlWraNWqVbz11lvbnO+21n3ExrOdZsyYEeecc0507drVDWWAXaZ///6Rl5cX7du3jwYNGsSgQYMyrxUWFkaTJk0y9xzp1q1bvP766+Xev7Xjr+effz769esX9erVi4MOOijOOuuszHt29FjziCOOiBo1akSXLl2iRo0acdJJJ0V2dnaceOKJ2+0fJ598cuTn50d+fn7mDIpnnnkmevfuHc2aNYvc3NwYPHhwvP322/Gvf/0r876+fftGvXr1Yq+99tpuBpCTkxOffPJJrF69OurWrZvp29vz1VdfRVlZ2XZ76vZqveCCC6JOnTpx8MEHR2Fh4XZ72NbsSIawcOHCeOutt2Lo0KFRo0aN+PGPfxx9+vQp11OPPvroaN++/Q731Bo1akTHjh3jueeei0mTJkVRUVHUqFGj3DQdOnSIww47LLKysqKgoCDatGmz3UtBHHXUUdG5c+et9tSrr746XnvttTj77LOjqKgoOnbsuM358e3kVHYBpNe4cePo0KFD3HXXXVsc+N13333x2GOPxZIlSyIrKytWr15d4elWtWvXjvbt28ekSZOib9++MWnSpPif//mfiNh4nZM5c+aUO2AsLS3d5k02rrzyyujTp0+UlZXF3/72t/jlL38ZDz74YDRt2jT++c9/xk033RTvvvturF27NkpLS8ttmE8++eR4+umno02bNvH000/H2WefnaljyZIlW9TxzePrr78+Ro8eHSeccEIccsghMWDAgAo3HPXq1YulS5dutfYlS5ZEw4YNy90g5eCDDy53usKmp9jvtddemQPFndWzZ89YtGhRDB48OL766qvo0aNHXHzxxVscuCxZsiS+853vZB5/5zvfiQ0bNsSyZcsqrKlmzZrbrSk/Pz+WL18ed9xxR3To0GGLDfGyZctixIgR8eabb8aaNWsiSZIdum5Mw4YNt/n6KaecEg899FD069cv6tevv935Aewuixcvjrp168by5ctj7dq15W4EmCRJ5nT+hQsXZi4tsy3Dhg2L3//+9/Gzn/0s6tatG+edd1787Gc/KzfNihUroqSkJA4++ODMc9vqMd9cc/Tb9pmDDjqo3ONvLvuyaY/LysqKZcuWxYIFC+LZZ5+Nl156KfPaNzdn2Fy9evVi+fLlUVZWtkM3FCstLY3bbrstXnjhhVixYkXmPStWrIi99947xo4dG+PGjYtbbrklmjZtGkOHDo2f/OQn0bdv3xg9enSce+65Ua1atTjttNPiF7/4xU6tgwULFsTChQu32H8oLCzMPN58PW2qbt26kZWVFUuXLo1GjRpVOM03p+99o3bt2lGnTp1YvHhx5vvcVfsON9xwQ4wZMyaOP/74OPTQQ2PgwIFb/H0uWbIk6tevn7lZasTGfYePP/4483jTg9wd2W+I2LjfMnbs2CguLq7wGsdTpkyJO+64Iz777LMoKyuL4uLiOPLII7c5z22t+4iN679r167x4IMPxh133LHdGgF21NixY6N169bx+uuvx5AhQ2LFihWZ452///3vceutt8bHH38cJSUlsX79+jj++OPLvX9rx19Lliwpt23btOfvyLHmptcX3WuvvXa6f0yYMGGLfrVkyZJyx9y1atWKevXqxeLFi+OQQw6JiPLb4+1lAKNHj45x48bFbbfdFk2aNIkhQ4aU64NbU6dOnahWrVosXbq0wh+td7TWzXvYN5eY2Vk7kiEsWbIk6tatW25A1MEHHxzvvvtu5vHm39G6detiw4YNmZtdVeSkk06K2267LSIic3r/pqZNmxZjx46NTz/9NNNTGzduvM3l2d6xeJ06deL444+P8ePHx+jRo7c5Ld+eoPU/xKBBg+Lkk0+O888/P/Pcm2++GXfffXfcf//98aMf/SiqVasWLVu2jCRJKpxH9+7d4/bbb4+WLVtGcXFx5gDkoIMOipYtW8b48eN3uq5q1apFfn5+HHbYYfHqq69G06ZN45prronDDz88brvttqhdu3bcf//95UbH9ujRI7p37x4ffPBBzJ07NzPS8qCDDopDDjkkc93YzX33u9+NkSNHRllZWbz44osxaNCgmDVrVrmDjIiI1q1bx+9+97v4+uuvt3gtYuMIp0WLFpU7eFy4cGF897vf3enlj9i44V+7dm3m8aYhb/Xq1WPAgAExYMCA+Ne//hV9+/aN733ve9GnT58tavpmtHHExoPGnJyc2HfffcuNltlZPXr0iLFjx1Z4Q7XbbrstsrKy4umnn4769evHyy+/HNddd9125/nNHS4rUlpaGldffXWcdNJJ8cgjj0SvXr22etAKsDvNmTMnFi9eHEcffXTUr18/9tprr5g0aVIceOCBW0x70EEHZa7FvS37779/ZuTINzdPatmyZbntXP369aN69eqxYMGC+OEPfxgRG3tMRZ+7K2y+TW7YsGHcdtttFY6CbNiwYfTq1WuHzjZo0aJFZGdnx+TJk7c4I6IiEydOjOnTp8cf/vCH+M53vhMrVqyIVq1aZfZJ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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import StratifiedKFold # 导入K折验证工具\nfrom sklearn.model_selection import GridSearchCV # 导入网格搜索工具\nkfold = StratifiedKFold(n_splits=10) # 10折验证\nrf = RandomForestClassifier() # 随机森林\n# 对随机森林算法进行参数优化\nrf_param_grid = {\"max_depth\": [None],\n              \"max_features\": [3, 5, 12],\n              \"min_samples_split\": [2, 5, 10],\n              \"min_samples_leaf\": [3, 5, 10],\n              \"bootstrap\": [False],\n              \"n_estimators\" :[100,300],\n              \"criterion\": [\"gini\"]}\nrf_gs = GridSearchCV(rf,param_grid = rf_param_grid, cv=kfold, \n                    scoring=\"accuracy\", n_jobs= 10, verbose = 1)\nrf_gs.fit(X_train, y_train) # 用优化后的参数拟合训练数据集","execution_count":50,"outputs":[{"output_type":"stream","text":"Fitting 10 folds for each of 54 candidates, totalling 540 fits\n","name":"stdout"},{"output_type":"stream","text":"[Parallel(n_jobs=10)]: Using backend LokyBackend with 10 concurrent workers.\n[Parallel(n_jobs=10)]: Done  30 tasks      | elapsed:    6.9s\n[Parallel(n_jobs=10)]: Done 180 tasks      | elapsed:   25.9s\n[Parallel(n_jobs=10)]: Done 430 tasks      | elapsed:   59.5s\n[Parallel(n_jobs=10)]: Done 540 out of 540 | elapsed:  1.3min finished\n","name":"stderr"},{"output_type":"execute_result","execution_count":50,"data":{"text/plain":"GridSearchCV(cv=StratifiedKFold(n_splits=10, random_state=None, shuffle=False),\n             error_score=nan,\n             estimator=RandomForestClassifier(bootstrap=True, ccp_alpha=0.0,\n                                              class_weight=None,\n                                              criterion='gini', max_depth=None,\n                                              max_features='auto',\n                                              max_leaf_nodes=None,\n                                              max_samples=None,\n                                              min_impurity_decrease=0.0,\n                                              min_impurity_split=None,\n                                              min_samples_leaf=1,\n                                              min_samples_split=2...\n                                              oob_score=False,\n                                              random_state=None, verbose=0,\n                                              warm_start=False),\n             iid='deprecated', n_jobs=10,\n             param_grid={'bootstrap': [False], 'criterion': ['gini'],\n                         'max_depth': [None], 'max_features': [1, 3, 10],\n                         'min_samples_leaf': [1, 3, 10],\n                         'min_samples_split': [2, 3, 10],\n                         'n_estimators': [100, 300]},\n             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n             scoring='accuracy', verbose=1)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.metrics import (accuracy_score, confusion_matrix)\ny_hat_rfgs = rf_gs.predict(X_test) # 用随机森林算法的最佳参数进行预测\nprint(\"参数优化后随机森林测试准确率:\", accuracy_score(y_test.T, y_hat_rfgs))","execution_count":51,"outputs":[{"output_type":"stream","text":"参数优化后随机森林测试准确率: 0.8852459016393442\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"cm_rfgs = confusion_matrix(y_test,y_hat_rfgs) # 显示混淆矩阵\nplt.figure(figsize=(4,4))\nplt.title(\"Random Forest (Best Score) Confusion Matrix\")\nsns.heatmap(cm_rfgs,annot=True,cmap=\"Blues\",fmt=\"d\",cbar=False)","execution_count":52,"outputs":[{"output_type":"execute_result","execution_count":52,"data":{"text/plain":"<matplotlib.axes._subplots.AxesSubplot at 0x7f52881f9d90>"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 288x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(\"最佳参数组合:\",rf_gs.best_params_)","execution_count":53,"outputs":[{"output_type":"stream","text":"最佳参数组合: {'bootstrap': False, 'criterion': 'gini', 'max_depth': None, 'max_features': 1, 'min_samples_leaf': 10, 'min_samples_split': 2, 'n_estimators': 300}\n","name":"stdout"}]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}